我有一个 ssh 密钥对,它是为用作我的 GoCD CI/CD 服务器的访问密钥而生成的。它本来可以正常工作,但由于我做了一些配置更改(将服务器从容器移出到 Linux 主机),我需要在 Linux 主机上重新安装密钥,所以我这样做了。我已经生成了密钥对,我认为继续使用同一对密钥比更改 Bitbucket 上的公钥更简单(而且我在容器中运行了一些 CI/CD 代理,它们当前正在使用此密钥对)。
所以我的问题就从这里开始。我将预先生成的私钥 ( gocd
) 从暂存目录移动到go
用户的主目录 ( /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 文件的公钥(最后一个命令的第一个输出)实际上与我之前生成的私钥匹配。
这是怎么回事?是否存在一些ssh-agent
我不知道的缓存?是否还有其他事情发生?
答案1
这个问题的答案非常简单。显然,在存在id_rsa
andid_rsa.pub
对的情况下,评估私钥并输出相关公钥的 ssh-keygen 命令将忽略文件的内容id_rsa
并假定相关id_rsa.pub
文件匹配。
id_rsa.pub
从目录中删除不匹配的文件~go/.ssh/
使得 ssh-keygen 能够正确输出相关的公钥。