Ssh

為什麼同一個私鑰文件會生成兩個不同的公鑰字元串?

  • September 28, 2017

我有一個 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我不知道的記憶體?有其他事情發生嗎?

這個問題的答案非常簡單。顯然,在存在id_rsaandid_rsa.pub對的情況下,評估私鑰並輸出相關公鑰的 ssh-keygen 命令將忽略id_rsa文件的內容並假設相關id_rsa.pub文件匹配。

id_rsa.pub從目錄中刪除不匹配的文件~go/.ssh/允許 ssh-keygen 正確輸出關聯的公鑰。

引用自:https://serverfault.com/questions/874672