我有一个生成的ssh密钥对用作我的GoCD CI / CD服务器的访问密钥。 它正在工作,但由于我做了一些configuration更改(将服务器从容器移动到Linux主机)我需要在Linux主机上重新安装密钥,所以我做了。 我已经生成了这对,而不是更改Bitbucket上的公钥我认为继续使用同一对(也有一些CI / CD代理运行在当前使用此密钥对的容器中)会更容易。
所以这是我的问题开始的地方。 我将预生成的私钥( gocd )从我的登台目录移到go用户的homedir( /var/go/ ):
[ip-10-71-10-66 docker]# cp ./gocd ~go/.ssh/id_rsa [root@ip-10-71-10-66 docker]# diff gocd ~go/.ssh/id_rsa [root@ip-10-71-10-66 docker]#
到目前为止, id_rsa文件和gocd文件看起来是一样的。 但是,当我比较公钥…
[root@ip-10-71-10-66 docker]# ssh-keygen -y -e -f ~go/.ssh/id_rsa && ssh-keygen -y -e -f gocd ---- BEGIN SSH2 PUBLIC KEY ---- Comment: "2048-bit RSA, converted by root@ip-10-71-10-66 from OpenSSH" TEXT REMOVED GsH8pAPy3iQI54HvSZn9qNtA19pL+8r/DlFb6X4qeTyvte0iEIqAYmuSJglcf6OlTx0FxR HK9y3iyG01zdcBdr2+O06j ---- END SSH2 PUBLIC KEY ---- ---- BEGIN SSH2 PUBLIC KEY ---- Comment: "2048-bit RSA, converted by root@ip-10-71-10-66 from OpenSSH" TEXT REMOVED bse2UtKDtTbN1EbUZ7XxLOeVG6j6CDokLagJ9LOxdLW0Zb4aMnm/sg1x5VcAY6rQKFEnSl F3z68VhKCw0ZOqVBNg8SGz ---- END SSH2 PUBLIC KEY ----
希望从这个例子中你可以看出为什么我很困惑。 现在真正奇怪的是,来自id_rsa文件的公钥(最后一个命令的第一个输出) 实际上与我生成的更早的私钥相匹配 。
这里发生了什么? 有没有一些caching发生在我不知道的ssh-agent中? 还有其他事情吗?
这个问题的答案令人沮丧地简单。 显然,如果存在id_rsa和id_rsa.pub对,则评估私钥并输出相关公钥的ssh-keygen命令将忽略id_rsa文件的内容,并假定关联的id_rsa.pub文件匹配。
从id_rsa.pub ~go/.ssh/目录删除不匹配的id_rsa.pub文件允许ssh-keygen正确输出关联的公钥。