Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

SSH 連線報「Host key verification failed」解決方案與原理

編輯:Linux 教學

前言

當目標伺服器重裝系統、更換主機金鑰或遭遇中間人攻擊時,SSH 客戶端會拒絕連線並顯示 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!。本文說明錯誤原因、快速修復與長期配置策略。

錯誤原因

SSH 客戶端在 ~/.ssh/known_hosts 儲存已連線主機的公鑰指紋。再次連線時會比對:

  • 指紋一致 → 信任連線
  • 指紋不一致 → 拒絕連線,防止中間人攻擊

常見觸發場景:目標機重裝 OS、更換 SSH 金鑰、IP 變更指向新主機、DNS 劫持、負載均衡後端輪換。

錯誤訊息範例


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/user/.ssh/known_hosts:8
Host key verification failed.

解決方案

方法一:單次移除舊指紋(推薦,最安全)


# 移除指定主機的舊記錄
ssh-keygen -R 目標IP或主機名

# 例如:
ssh-keygen -R 192.168.1.100
ssh-keygen -R myserver.example.com

執行後再次連線會提示新指紋確認,輸入 yes 即可重新建立信任。

方法二:手動編輯 known_hosts


vi ~/.ssh/known_hosts
# 刪除對應目標 IP/主機名的那一行

方法三:臨時跳過檢查(僅限信任內網、臨時測試)


ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host

方法四:永久關閉嚴格檢查(不推薦生產環境)


vi /etc/ssh/ssh_config
# 或 ~/.ssh/config
# 加入:
StrictHostKeyChecking no
UserKnownHostsFile /dev/null

風險:完全失去中間人攻擊防護,僅建議用於完全可控的內網測試環境。

進階:配置 ~/.ssh/config 針對特定主機放寬檢查


Host 192.168.1.*
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
    LogLevel ERROR

Host production-*
    StrictHostKeyChecking ask
    UserKnownHostsFile ~/.ssh/known_hosts

這樣內網測試機自動接受新金鑰,生產環境維持嚴格驗證。

跳板機/堡壘機場景

若透過跳板機連線目標,錯誤可能來自:

  1. 跳板機本身的 known_hosts 有舊記錄 → 在跳板機執行 ssh-keygen -R 目標IP
  2. 目標機實際金鑰變更 → 確認是否為授權重裝,再移除舊記錄

最佳實踐總結

場景建議做法
目標機確認重裝/換鑰ssh-keygen -R host 移除舊記錄,重新信任
內網測試機頻繁重裝~/.ssh/config 針對網段設定 StrictHostKeyChecking no
生產環境正常運維嚴格驗證,任何指紋變更需調查確認
自動化部署腳本預先掃描金鑰 ssh-keyscan host >> known_hosts,避免互動提示

補充:主動掃描並信任已知主機


# 掃描並寫入 known_hosts(首次部署自動化適用)
ssh-keyscan -t rsa,ecdsa,ed25519 192.168.1.100 >> ~/.ssh/known_hosts
ssh-keyscan -t rsa,ecdsa,ed25519 myserver.example.com >> ~/.ssh/known_hosts

總結

Host key verification failed 是 SSH 安全機制正常運作的表現。正確做法是確認變更原因,再用 ssh-keygen -R 移除舊記錄。切勿為了方便永久關閉檢查,除非在完全隔離、受控的測試網段。

Copyright © Windows教程網 All Rights Reserved