Ssh
為什麼同一個私鑰文件會生成兩個不同的公鑰字元串?
我有一個 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_rsa
andid_rsa.pub
對的情況下,評估私鑰並輸出相關公鑰的 ssh-keygen 命令將忽略id_rsa
文件的內容並假設相關id_rsa.pub
文件匹配。
id_rsa.pub
從目錄中刪除不匹配的文件~go/.ssh/
允許 ssh-keygen 正確輸出關聯的公鑰。