MacのHomebrewでopensshを更新し、バージョンを上げたら、下記のエラーで接続出来なくなった。
ERROR: Unable to negotiate with 192.168.1.10 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss
全ての接続先でエラーが出るわけでなく、比較的古いOSを使用している接続先へ繋がらなくなっていた。
- 接続できるSSH
$ ssh -V
OpenSSH_8.4p1 Debian-5, OpenSSL 1.1.1k 25 Mar 2021
- 接続出来ないSSH
$ ssh -V
OpenSSH_8.9p1, OpenSSL 1.1.1n 15 Mar 2022
調べてみたところ、OpenSSH8.8からSHA-1のRSA鍵は無効になっていたのが原因
解決策
.ssh/configを下記の内容で新規作成もしくはHostKeyAlgorithms
とPubkeyAcceptedAlgorithms
を追記
Host HOST-NAME(任意の名前)
Hostname FQDN or IP
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
HostKeyAlgorithms=+ssh-rsa
PubkeyAcceptedAlgorithms=+ssh-rsa
ちなみに、古いSunOSだと下記の記述も追記する必要がありました。
KexAlgorithms +diffie-hellman-group1-sha1
Ciphers aes128-cbc
注意
私の環境では、MacとLinuxを使う機器が多いので、SSH鍵管理をGitで行っています。
Git管理している場合、使用PCのSSHが8.8より古いと、上記の解決策を行うと逆に接続出来なくなってしまいます。
/home/user/.ssh/config: line 13: Bad configuration option: pubkeyacceptedalgorithms
無効なオプションは無視して接続出来れば問題ないのですが、接続出来ない事には困った事です。
当面は、OpenSSH8.8以降のバージョンと古いバージョンでも利用できるように、Gitでブランチ作成して利用する事にしました。
Linuxでも標準でOpenSSH 8.8以降が搭載されれば、マージすれば良いですしね。