1. 程式人生 > >ssh登入提示RSA Host key認證失敗的解決方法

ssh登入提示RSA Host key認證失敗的解決方法

【問題描述】

今天用ssh命令登入一臺此前連線過的伺服器,失敗,出現下面的錯誤提示

【問題分析】

從提示看,很明顯,是RSA key不匹配。

根據提示檢視本機/home/user/.ssh/目錄下,檢視有如下3只檔案:

id_rsa

id_rsa.pub

known_hosts

從檔名及檢視檔案內容可以看出:

1,前兩個是用ssh-keygen命令生成的私鑰和公鑰;

2,known_hosts是ssh訪問過的PC的公鑰記錄,當下次訪問相同PC時ssh會核對公鑰,如果不同則發出警告,避免受到DNS Hijack攻擊;

從我們遇到的錯誤看,明顯是known_hosts出了問題。

【解決方法】

1,刪除/home/user/.ssh/目錄下的known_hosts檔案:

簡單粗暴,如果想快速解決這個問題,可以採用

2,修改known_hosts內容:

根據上面截圖中的提示

Offending RSA key in /home/user/.ssh/known_hosts:6

意思是,known_hosts檔案的第6行發生衝突,因此,有兩個方法:

(1)刪除此行所記錄的公鑰:

刪除後的效果,其實等同於方法1,刪除後再次連線時會記錄新的公鑰;

(2)將此行所記錄的公鑰替換為想連線的PC的公鑰:

對比了對方PC上的/home/user/.ssh/id_rsa.pub檔案,發現和成功連線所生成存放在known_host中的公鑰有差異,所以放棄這個方法。

但可以用上述方法(1)中生成的公鑰的替換,如果你想來回倒騰下的話,其實結果和方法(1)相同;

其他部落格裡有介紹修改ssh配置的兩種方法,但我嘗試下來都失敗了,不過,仍然分享在這裡,如果有興趣研究的話,可以研究下失敗原因

1,修改/etc/ssh/sshd_config

PermitRootLogin no修改為yes,
PubkeyAuthentication yes修改為no
AuthorizedKeysFile %h .ssh/authorized_keys前面加上#遮蔽掉,
PasswordAuthentication no修改為yes

2,修改/etc/ssh/ssh_config

#  StrictHostKeyChecking ask
改成
StrictHostKeyChecking no

【備註資訊】

最後,附上ssh連線的認證原理:

公鑰:用於加密,存在於伺服器
私鑰:用於解密,存在於客戶機

認證流程:
1,客戶端向伺服器發出連線請求
2,伺服器檢視客戶端公鑰(~/.ssh/authorized_keys)該客戶機(客戶機標誌:使用者@Host)對應的公鑰
3,伺服器驗證公鑰合法,則產生一條隨機數(challenge),用公鑰加密傳送給客戶端
4,客戶端用私鑰解密回傳伺服器端。
5,隨機數一致,認證通過