ローカルマシンを新調したら今までsshでログイン出来ていたリモートホストに突然ログインできなくなりました。
$ gcloud compute ssh REMOTE_HOST USER@IP_ADDRESS: Permission denied (publickey).
sshに関してよくあるエラーメッセージです。
ただ、新旧マシンで .ssh
のディレクトリやファイルの権限、鍵の中身を確認しても同一であり問題なさそうでした。
原因
no mutual signature algorithm
という署名アルゴリズムのミスマッチが原因でした
調べ方
ssh時にvTオプションをつけることで原因が分かりました
$ ssh -vT -i ~/.ssh/google_compute_engine USER@REMOTE_HOST ... ... debug1: send_pubkey_test: no mutual signature algorithm debug1: No more authentication methods to try. ...
と、出力メッセージの中にエラーの原因が出力されてます
コマンドヘルプによると
-T Disable pseudo-terminal allocation. -v Verbose mode. Causes ssh to print debugging messages about its progress. This is helpful in debugging connection, authentication, and configuration problems. Multiple -v options increase the verbosity. The maximum is 3.
とのことです。
対処方法
参考記事そのままになりますが
PubkeyAcceptedKeyTypesのオプションをつけて接続する
$ ssh -o 'PubkeyAcceptedKeyTypes +ssh-rsa' -i ~/.ssh/google_compute_engine USER@REMOTE_HOST
あるいは、 ~/.ssh/config
に以下を記述
Host {REMOTE_HOST} HostKeyAlgorithms ssh-rsa PubkeyAcceptedKeyTypes ssh-rsa IdentityFile ~/.ssh/google_compute_engine
これで問題なく今まで通りログインできるようになりました
(参考)各マシンのsshのバージョン
# Remote Host (GCEのVM) OpenSSH_6.7p1 Debian-5+deb8u1, OpenSSL 1.0.1k 8 Jan 2015 # Old Mac (Remote HostへのSSH OK) OpenSSH_8.1p1, LibreSSL 2.7.3 # New Mac (Remote HostへのSSH NG) OpenSSH_9.0p1, LibreSSL 3.3.6
バージョン乖離が大きいときは要注意ということですね
追記
後で見つけた記事、これやこれによると OpenSSH 8.8 から RSA方式が使えなくなったようです。
自分の場合は同じ鍵をそのまま使いたかったので暫定的な対処をしましたが、本来は強度の強い暗号化形式で鍵を新規作成すべきでしょう
$ ssh-keygen -t ed25519