为什么同一个私钥文件会生成两个不同的公钥字符串?

为什么同一个私钥文件会生成两个不同的公钥字符串?

我有一个 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_rsaandid_rsa.pub对的情况下,评估私钥并输出相关公钥的 ssh-keygen 命令将忽略文件的内容id_rsa并假定相关id_rsa.pub文件匹配。

id_rsa.pub从目录中删除不匹配的文件~go/.ssh/使得 ssh-keygen 能够正确输出相关的公钥。

相关内容