當使用SSH指令,連線到一個老舊版本的伺服器上時,SSH出現這個錯誤
No matching host key type found. Their offer: ssh-rsa,ssh-dss
或者
Couldn't agree on host key algorithm.
造成問題的原因
(由於 ssh-rsa 是基於SHA-1的算法,SHA-1目前已有論文利用演算法的數學弱點,例如差分分析,能比理論值更快找到哈希碰撞。)
而 ssh-dss 已於 OpenSSH 7.0 之後被移除
所以要將SSH連線指令,從原本短短一行
ssh root@123.45.67.89 -p 1234
改為這樣
ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa root@123.45.67.89 -p 1234
如此一來便可連接成功
順帶一提,使用Putty進行連線,就不會有這個問題
參數的意思
PubkeyAcceptedKeyTypes:設定Client接受哪些密鑰類型,來進行身份驗證(向伺服器驗證自身身份)
HostKeyAlgorithms:設定客戶端接受哪些密鑰類型,來驗證伺服器的身份
自動加入參數
每次都要加參數、輸入這麼一長串 嫌麻煩?
可參考以下的做法
在Client端 修改設定檔 ~/.ssh/config(無此檔案的話,新增一個)
針對特定舊電腦的IP
Host 123.45.67.89
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
若要針對所有IP 全局設定
Host *
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
也可以像這樣子全局設定,列出大部分的算法
伺服器端若支援更安全的密鑰類型,會自動挑選更安全的
若伺服器只支援ssh-rsa,則採用ssh-rsa
Host *
HostKeyAlgorithms ssh-rsa,ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,rsa-sha2-512,rsa-sha2-256
PubkeyAcceptedKeyTypes ssh-rsa,ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,rsa-sha2-512,rsa-sha2-256
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com
改完後可能要到 .ssh/known_hosts 底下清除曾連線過的主機紀錄
否則可能遇到以下錯誤
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the RSA key sent by the remote host is XXX Please contact your system administrator.
查看SSH版本
ssh -V
列出支援的加密方式、密鑰類型
列出支援密鑰類型
ssh -Q key
列出支援的密鑰交換算法
ssh -Q kex
列出支援的消息驗證碼
ssh -Q mac
列出支援加密方式
ssh -Q cipher
沒有留言:
張貼留言