ある日、sshの設定をしてつなげようとしたら、こんなエラーが…
sign_and_send_pubkey: no mutual signature supported
xxx@xxx.xxx.xxx: Permission denied (publickey).
アクセス拒否されています。別のマシンではつながるのに、特定のマシンだけつながらなくなりました。
原因:クライアントのOpenSSHのバージョンが古い
ホスト側のOpenSSHのバージョンが高くて、クライアントのバージョンが古いと発生する事象でした。
ホスト側(自分)のバージョン
ssh -V
OpenSSH_9.6p1 Ubuntu-3ubuntu13.12, OpenSSL 3.0.13 30 Jan 2024
でしたが、相手方のバージョンはOpenSSH_5.3p1。そのために発生していたんですね。
対処法:+ssh-rsa
相手方のOpenSSHバージョンをあげられれば一番いいのですが、大人の事情でそうもいかない。でも接続したい。
そんなときは.ssh/configに追記です。
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
ここのアクセス先はssh-rsaを使ってくださいね、と明示してあげると接続できるようになります。
v8からssh-rsaがデフォルト無効になった
セキュリティの問題で、ssh-rsa方式がデフォルト無効になったようです。
そのため古いOpenSSHを使っているところにsshするときには「ssh-rsa暗号方式を使いますよ」と書かないと接続できなくなってしまうのですね。
大人の事情も色々あるので難しいところではありますが、セキュリティに関することなのでなるべく可能ならクライアント側もバージョンをあげたいところですね。
問題のなかった別のマシンはv7だった
ではなんで別のマシンはつながっていたのか?というと、このマシンのOpenSSHバージョンが7だったから。
v8以前だからエラーもなく使えていただけですね。