SSHをバージョンアップしたら接続出来なくなった

OpenSSH 8.8 disables RSA signatures

* 本ページはプロモーションが含まれています

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を下記の内容で新規作成もしくはHostKeyAlgorithmsPubkeyAcceptedAlgorithmsを追記

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以降が搭載されれば、マージすれば良いですしね。


See also