1. 程式人生 > >解決ssh-copy-id時Host key verification failed的錯誤

解決ssh-copy-id時Host key verification failed的錯誤

wan 復制 ant mark con 用戶 本地 RoCE oot

如果因為某種原因(服務器系統重裝,服務器間IP地址交換,DHCP,虛擬機重建,中間人劫持),這裏筆者是因為虛擬機重建的緣故,該IP地址的公鑰改變了,當使用 SSH 連接的時候會出現

技術分享圖片

 然後筆者把.ssh/knowns_hosts和.ssh/authorized_keys刪除了,

重新ssh-copy-id把公鑰復制給其他公鑰試了一下,結果
技術分享圖片

  首先看下正常的步驟:

SSH 連接遠程主機時,會檢查主機的公鑰。如果是第一次該主機,會顯示該主機的公鑰摘要,提示用戶是否信任該主機
The authenticity of host ‘192.168.164.23 (192.168.164.23)‘ can‘t be established.

RSA key fingerprint is e9:0c:36:89:7f:3c:07:71:09:5a:9f:28:8c:44:e9:05.
Are you sure you want to continue connecting (yes/no)?

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)中配置:
Host *
StrictHostKeyChecking no

Q:如何防止遠程主機公鑰改變導致 SSH 連接失敗?
A:當確認中間人劫持×××風險比較小的情況下,才可以使用下面的方法,禁用 SSH 遠程主機的公鑰檢查。 SSH 客戶端提供一個 UserKnownHostsFile 配置,允許指定不同的 known_hosts 文件。那麽將 known_hosts 指向不同的文件,不就不會造成公鑰沖突導致的中斷了麽?

在.ssh/config(或者/etc/ssh/ssh_config)中配置:
Host *
UserKnownHostsFile /dev/null

綜上
在.ssh/config(或者/etc/ssh/ssh_config)中配置
Host *
StrictHostKeyChecking no
UserKnownHostsFile /dev/null

或者將兩個命令結合起來使用
ssh-copy-id -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i /root/.ssh/id_rsa.pub root@hdp23

技術分享圖片
同樣第一次連接需要
ssh -q -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@hdp23
技術分享圖片
以後就可以直接使用ssh hdp23連接了

然後scp復制文件也是同樣的道理
scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -r /var/tmp/performance/moo.dat root@hdp23:/var/tmp/

如有不當之處,請各位大神指教。

解決ssh-copy-id時Host key verification failed的錯誤