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,隨機數一致,認證通過