Question:
我們使用 ssh 連接 linux 主機時,可能出現 “ Host key verification failed.“ 的提示,ssh 連接不成功。可能的提示信息如下:
How-To
網上很多的解決方案是:vi ~/.ssh/known_hosts 刪除與想要連接的主機相關的行;或者直接刪除 known_hosts 這個文件。當然這個方案也是可行的,但並非解決問題的根本辦法,因為繼續使用,今後還會出現這樣的情況,還得再刪除。下面簡單講一下這個問題的原理和比較長久的解決方案。
用 OpenSSH 的人都知 ssh 會把你每個你訪問過計算機的公鑰 (public key) 都記錄在~/.ssh/known_hosts。當下次訪問相同計算機時,OpenSSH 會核對公鑰。如果公鑰不同,OpenSSH 會發出警告,避免你受到 DNS Hijack 之類的攻擊。
SSH 對主機的 public_key 的檢查等級是根據 StrictHostKeyChecking 變量來配置的。默認情況下,StrictHostKeyChecking=ask。簡單所下它的三種配置值:
* StrictHostKeyChecking=no
* StrictHostKeyChecking=ask
* StrictHostKeyChecking=yes
對於我來說,在內網的進行的一些測試,為了方便,選擇最低的安全級別。在 .ssh/config(或者 /etc/ssh/ssh_config)中配置:
- StrictHostKeyChecking no
- UserKnownHostsFile /dev/null
注:這里為了簡便,將 UserKnownHostsFile 設為 /dev/null,就不保存在known_hosts中了!
Supplement
* 參考資料:SSH Host Key Protection
沒有留言:
張貼留言