【Linux】SSH無法連線 no matching host key type found.

當使用SSH指令,連線到一個老舊版本的伺服器上時,SSH出現這個錯誤

No matching host key type found. Their offer: ssh-rsa,ssh-dss

或者

Couldn't agree on host key algorithm.



造成問題的原因


因為 OpenSSH 8.8 的變更,再此之後的版本,不再支援 ssh-rsa 密鑰類型來進行身分驗證

(由於 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





沒有留言:

張貼留言