當使用 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/