警告說明了什麼
伺服器透過主機金鑰證明其身分。當金鑰與用戶端先前儲存的金鑰不同時,OpenSSH 會顯示 REMOTE HOST IDENTIFICATION HAS CHANGED 並拒絕連線。用戶端無法區分無害的變更與攻擊,因此在查證之前,應將此警告視為尚未解決的問題。
常見原因
常見原因包括伺服器重新安裝、虛擬機器從映像檔還原或複製、位址現已指派給另一台機器,以及負載平衡器將你導向不同節點。攻擊者攔截連線也會觸發相同警告。如果你並未預期會有變更,請停止操作,不要輸入密碼。
比較指紋
透過不依賴此 SSH 連線的管道,在伺服器上讀取真正的指紋,例如供應商主控台或 Hypervisor 主控台。ssh-keyscan 指令只會顯示網路向你提供的內容,因此本身無法證明任何事情。它只能用來與主控台取得的值比較。
sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
ssh-keyscan -t ed25519 server.example | ssh-keygen -lf -取代舊項目
只有在指紋相符後,才能移除舊項目並重新連線。非標準連接埠有自己的項目,以方括號格式記錄。ssh-keygen 會將原本的檔案保留為 known_hosts.old。不要停用 StrictHostKeyChecking,也不要刪除整個 known_hosts 檔案,否則會移除對所有伺服器的保護。
ssh-keygen -R server.example
ssh-keygen -R '[server.example]:2222'
ssh user@server.example避免重新安裝後出現警告
若計畫重建伺服器並希望保留其身分,請安全地備份 /etc/ssh 中的主機金鑰,並以相同的擁有者與權限還原。複製機器時則應採取相反做法:從同一映像檔建立的每台機器都需要自己的主機金鑰,否則多台伺服器會共用同一身分。
CH-J Server Manager 中的主機金鑰
應用程式會將主機金鑰的 SHA-256 指紋儲存在自己的加密保管庫,與 OpenSSH 的 known_hosts 檔案分開保存。發生變更時,它會封鎖連線,並顯示已知指紋與新指紋。只有在你確認後才會取代項目,取消則不會變更任何內容。在 Alpha 0.1.1 中,檢查也涵蓋每台跳板主機,金鑰變更時,進行中的傳輸會停止。應用程式無法代你驗證新指紋,因此透過其他管道查證仍是你的工作。