一.錯誤描述
報錯信息里提示了路徑信息/root/.ssh/known_hosts:20
二.解決方案
方法一
輸入以下指令:
ssh-keygen -R XXX(需要連接遠程服務器的ip)
按照我的例子ip:10.165.7.136
,會返回以下信息:
重新嘗試連接:
輸入yes
,按下回車,成功連接。以上就是解決方案,如果想了解為什么這樣的,可以繼續往下看。
方法二:
直接刪除在~/.ssh/konwn_hosts
中對應ip的記錄,然后重新連接即可
三.原因分析
當兩個設備第一次進行鏈接時,會在~/.ssh/konwn_hosts
中將被連接設備的公鑰信息進行保存,后續再次鏈接時OpenSSH
會核對公鑰來進行一個簡單的驗證:
konwn_hosts
文件的公鑰信息如下:
正常連接應該如下:
然而有時候被連接的那臺遠程服務器系統被重裝、IP 沖突等原因
,會導致公鑰信息沒有對得上,所以導致錯誤:
而解決的方案很簡單,就是在把記錄在路徑 ~/.ssh/konwn_hosts
中的公鑰信息給刪除,重新建立一個新的鏈接就行,而指令ssh-keygen -R XXX(ip地址)
就是執行這個動作,甚至還貼心地將原來地公鑰信息進行備份:
當然,你也可以手動刪除指定的ip
,使用vi/vim
打開konwn_hosts
文件,你會發現里面的東西我和的一樣是密文形式的,這是因為新版的系統里的安全機制,為了防止某個不軌人士進行遠程撒毒,明文保存被替換成了通過算法計算的密文形式,當然你可以使用以下指令來查詢到某個ip的密文是多少:
ssh-keyscan XXX(IP地址)
以我的ip為例子,可以看到輸出了三個不同算法算出來的密文信息:
我們在konwn_hosts
文件中找到這個幾個密文信息,將其刪除,保存,重新鏈接即可。當然如果你覺得電腦就一個人用沒必要加密,也可以將加密給關閉,使用vi/vim來編輯路徑 /etc/ssh/ssh_config
中的字段:
將該字段修改為 no,保存退出,刪除公鑰信息重新鏈接一次,你會發現新保存的公鑰就是明文的信息。