概要
サーバにSSH接続を試みたところ、接続に失敗。
メンバーに試してもらうと、同じpemを使用して接続に成功したためローカル環境依存だとはわかった。
しかし、エラーメッセージからは何が原因か判断できず解決に時間がかかったお話。
結論
OpenSSHのリリースノートを確認すると、
OpenSSH 8.8以降はデフォルトでRSAのSSH接続が無効になっていた。
一時的な回避策としては、下記オプションを設定することで接続が可能。(非推奨)
ssh -oHostKeyAlgorithms=+ssh-rsa -oPubkeyAcceptedAlgorithms=+ssh-rsa {接続先}
さらに、~/.ssh/configにこの設定を追加することで、
SSHコマンド実行時に設定が不要になる。(非推奨)
Host {接続先}
HostKeyAlgorithms=+ssh-rsa
PubkeyAcceptedAlgorithms=+ssh-rsa
経緯
サーバ接続時に下記エラーが発生。
ssh -i ~/.ssh/XXX.pem {接続先}
sign_and_send_pubkey: no mutual signature supported
{ユーザ名}@{接続先IPアドレス}: Permission denied (publickey).
Permission Deniedを鵜呑みにしてしまったため、見当違いの調査を行なってしまった。
また、自社のメンバーに接続を試してもらった所、
接続に成功したため逆に謎が深まった。
解決したきっかけは別サーバにて接続を試した際に、
下記のエラーが出力されたため。
ssh -i ~/.ssh/XXX.pem {接続先}
Unable to negotiate with {接続先IP} port XXXX: no matching host key type found. Their offer: ssh-rsa,ssh-dss
OpenSSHのバージョンが原因で自分だけ接続できないことがわかった。
OpenSSHのリリースノート
OpenSSHのバージョンを確認し、バージョンが8.8以降であることを確認。
ssh -V
OpenSSH_9.7p1, LibreSSL X.X.X
一時的な対応として、-oHostKeyAlgorithms=+ssh-rsa -oPubkeyAcceptedAlgorithms=+ssh-rsa
を加えることで無事接続成功。
ssh -oHostKeyAlgorithms=+ssh-rsa -oPubkeyAcceptedAlgorithms=+ssh-rsa {接続先}
まとめ
ssh-keygenコマンドで-t rsa
はしない。
既存の鍵がRSAの暗号化方式の場合、置き換えを検討する。
この回避策は暫定対応とすること。