將 ssh 金鑰從一台伺服器複製到另一台伺服器

將 ssh 金鑰從一台伺服器複製到另一台伺服器

我有一個伺服器(假設它的 ip 是 abcd),允許用戶透過 ssh 登入。現在我想改變物理機保持ip不變。這樣新機器仍然可以被這樣的使用者訪問

$ssh abcd

問題是,每次一個使用者嘗試登入時,她都會收到以下 ssh 密鑰不符錯誤。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@
@警告:遠端主機標識已更改! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@
可能有人正在做一些令人討厭的事情!
有人現在可能正在竊聽您(中間人攻擊)!
RSA 主機金鑰也可能剛剛更改。
遠端主機傳送的 RSA 金鑰的指紋是
02:dc:c6:18:1b:34:b7:1d:fa:90:ab:e1:95:48:69:84。
請聯絡您的系統管理員。
在 /home/user/.ssh/known_hosts 中新增正確的主機金鑰以消除此訊息。
/home/user/.ssh/known_hosts 中的違規金鑰:37
校友的 RSA 主機金鑰已更改,您要求嚴格檢查。
主機金鑰驗證失敗。

我知道使用者可以從檔案 ~/.ssh/known_hosts 中刪除第 37 行,下次她會得到是/否提示。我想要的是,用戶應該不知道整個機器更換的事情,而只是提示輸入密碼。

怎麼做?

答案1

作為埃薩貝爾如上所述,您可以將目前主機金鑰複製到新伺服器。

您可以透過開啟檔案來找到您的主機金鑰sshd_config(在我的 Ubuntu 12.04 盒子上/etc/ssh/sshd_config)。在設定檔中尋找HostKey條目。這些條目將告訴您主機密鑰檔案的位置。您應該能夠將這些檔案複製到新伺服器並更新新伺服器sshd_config以指向複製的金鑰(或只是覆蓋新伺服器上已存在的檔案)。

另外,請注意sshd_config手冊頁中的這一部分,特別是有關權限的部分:

指定包含 SSH 使用的私有主機金鑰的檔案。預設值/etc/ssh/ssh_host_key適用於協定版本 1、 和 /etc/ssh/ssh_host_dsa_key/etc/ssh/ssh_host_ecdsa_key以及/etc/ssh/ssh_host_rsa_key協定版本 2。可以有多個主機密鑰檔案。 「rsa1」金鑰用於版本 1,「dsa」、「ecdsa」或「rsa」用於 SSH 協定的版本 2。

答案2

如果您有原始的主機金鑰,則可以恢復它,這將阻止錯誤。

或者,您可以在 sshd 設定檔中關閉 StrictHostKeyChecking。

……然而,這樣做是一個非常非常糟糕的主意。 如果有一種方法可以讓您只ssh-keygen -R server.example.com在客戶端電腦上運行,那將是最好的方法 - 因為關閉主機金鑰檢查就像在說:“嘿。攻擊我。”當事情發生變化時,我希望保持模糊,但安全性應該比模糊變化放在第一位。

答案3

你可以這樣嘗試

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> .ssh/authorized_keys && echo "Key copied"' 

請注意,如果資料夾 .ssh 尚不存在,則上述命令將失敗。此外,在建立檔案時最好設定盡可能小的權限(基本上僅限擁有者讀寫)。這是一個更高級的命令:

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys && echo "Key copied"'

要了解有關此問題的更多信息,您必須訪問此網站:SSH 主機金鑰變更錯誤

相關內容