PuTTY 警告:伺服器的主機金鑰與 PuTTY 在註冊表中快取的金鑰不匹配

PuTTY 警告:伺服器的主機金鑰與 PuTTY 在註冊表中快取的金鑰不匹配

當使用 PuTTY 連接到新主機時,我經常收到警告

伺服器的主機金鑰與 PuTTY 在註冊表中快取的主機金鑰不符。

我按下後

是的

PuTTY 將伺服器 RSA 金鑰新增至 Windows 10 的登錄中,我將能夠登入遠端伺服器,並且警告不會再次出現。

我知道 RSA 金鑰是成對出現的,包括公用金鑰和私有金鑰。我想了解的是伺服器將哪個密鑰保存到我的本機電腦中,我猜是伺服器的公鑰。

另外,當 PuTTY 與伺服器建立初始 SSH 連線時,伺服器如何決定轉送哪個金鑰?假設伺服器有公鑰列表,是否有任何客戶端嘗試建立連線的通用金鑰?

這個通用密鑰儲存在伺服器上的哪裡?在下面/root/.ssh/ authorized_keys

答案1

一般來說,當你得到

警告 - 潛在的安全漏洞!

伺服器的主機金鑰與 PuTTY 在註冊表中快取的主機金鑰不符。

這是一個跡象中間人攻擊

另請參閱 PuTTY 文檔警告 - 潛在的安全漏洞!(訊息的主要部分是什麼,您在問題中以某種方式省略了)。

您永遠不會收到此訊息新的伺服器.當然,除非新伺服器重複使用某些廢棄伺服器的 IP 位址/主機名稱。在這種情況下,可以忽略該警告。


當然,它是一個民眾由 PuTTY 緩存的金鑰。 A私人的密鑰是秘密的,除了伺服器管理員之外,任何人都不能存取它。所以沒有辦法SSH客戶可以得到它。


伺服器確實可以擁有多個針對不同演算法的金鑰對(每種演算法一個,例如 RSA、DSA、ECDSA、ED25519)。客戶端和伺服器將就使用的最佳演算法達成一致(伺服器和客戶端都支援的演算法中的最佳演算法)。


金鑰對通常儲存在/etc/ssh(在具有 OpenSSH 的 Linux 上)。


儘管您的問題的措辭暗示您可能會將伺服器/主機金鑰對與用於向伺服器進行身份驗證的金鑰對混淆。

我的文章關於了解 SSH 金鑰對

答案2

我知道 rsa 金鑰成對出現,包括公用金鑰和私有金鑰,我想了解的是伺服器將哪個金鑰保存到我的本機電腦中,我猜是伺服器的公用金鑰

是的,PuTTY 保存伺服器公鑰的指紋。您可以在登錄中的鍵下看到所有儲存的按鍵:HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys

另外,當 putty 與伺服器建立初始 SSH 連線時,伺服器如何決定轉送哪個金鑰?假設伺服器有公鑰列表,是否有任何客戶端嘗試建立連線的通用金鑰?這個通用密鑰儲存在伺服器上的哪裡?

伺服器每種金鑰類型(RSA、DSA 等)只有一個主機金鑰。它們的儲存位置取決於配置,但是,例如,在 Ubuntu 系統上,它們通常儲存在預設位置/etc/ssh

答案3

如果您確定這不是 MITM 攻擊或其他安全漏洞,您可以使用plink更新金鑰,例如

plink [email protected]

它將提示警告 - 潛在的安全漏洞!訊息並提供更新快取密鑰的選項。無需親自修改 Windows 登錄...

答案4

運行以下命令

ssh-T[電子郵件受保護]

它會給您類似於以下內容的警告訊息,並且從known_hosts 檔案中刪除有問題的金鑰

警告:「github.com」的 ECDSA 主機金鑰與 IP 位址「140.82.112.4」的金鑰不同

  • ~/.ssh/known_hosts 中的 IP 違規金鑰:11
  • 符合 ~/.ssh/known_hosts 中的主機金鑰:15
  • 您確定要繼續連線嗎(是/否)

筆記:

  • 重複此操作,直到所有有問題的鑰匙都被移除。
  • Pageant(PuTTY 身份驗證代理程式)可能需要重新啟動

也可以看看:https://github.blog/2023-03-23-we-updated-our-rsa-ssh-host-key/

相關內容