【問題描述】
今天用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,隨機數一致,認證通過
---------------------
作者:thdsea4
來源:CSDN
原文:https://blog.csdn.net/thdsea4/article/details/74942327?utm_source=copy
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!