Mac SSH 連線出現 Host key verification failed. 錯誤解決

JaguarJack發表於2019-04-18

我們使用 ssh 連結 linux 主機時,可能出現 “Host key verification failed.“ 的提示,ssh 連線不成功。
可能的提示資訊如下:

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\
23:00:20:83:de:02:95:f1:e3:34:be:57:3f:cf:2c:e7.\
Please contact your system administrator.\
Add correct host key in /home/xahria/.ssh/known_hosts to get rid of this message.\
Offending key in /home/xahria/.ssh/known_hosts:8\
RSA host key for localhost has changed and you have requested strict checking.\
Host key verification failed.

網上很多的解決方案是:vi ~/.ssh/known_hosts 刪除與想要連線的主機相關的行;或者直接刪除known_hosts 這個檔案。 當然這個方案也是可行的,但並非解決問題的根本辦法,因為繼續使用,今後還會出現這樣的情況,還得再刪除。
下面簡單講一下這個問題的原理和比較長久的解決方案。
OpenSSH的人都知ssh會把你每個你訪問過計算機的公鑰(public key)都記錄在 ~/.ssh/known_hosts。當下次訪問相同計算機時,OpenSSH 會核對公鑰。如果公鑰不同,OpenSSH會發出警告,避免你受到DNS Hijack之類的攻擊。
SSH 對主機的 public_key 的檢查等級是根據 StrictHostKeyChecking 變數來配置的。預設情況下,StrictHostKeyChecking=ask。簡單所下它的三種配置值:

1.StrictHostKeyChecking=no 最不安全的級別,當然也沒有那麼多煩人的提示了,相對安全的內網測試時建議使用。如果連線server的 key 在本地不存在,那麼就自動新增到檔案中(預設是known_hosts),並且給出一個警告。

2.StrictHostKeyChecking=ask  預設的級別,就是出現剛才的提示了。如果連線和key不匹配,給出提示,並拒絕登入。

3.StrictHostKeyChecking=yes  最安全的級別,如果連線與key不匹配,就拒絕連線,不會提示詳細資訊。

對於我來說,在內網的進行的一些測試,為了方便,選擇最低的安全級別。在 .ssh/config(或者 /etc/ssh/ssh_config )中配置:

 StrictHostKeyChecking no
UserKnownHostsFile /dev/null

(注:這裡為了簡便,將 knownhostfile 設為 /dev/null,就不儲存在 known_hosts 中了)

相關文章