created: 2023-02-15T03:57:25.680Z

[ssh] sign_and_send_pubkey: no mutual signature supported

OSを macOS 13 Ventura にあげたら会社のゲートウェイにつなぐための ssh でエラーが出るようになった。

sign_and_send_pubkey: no mutual signature supported Permission denied (publickey,gssapi-with-mic).

最初は育休中にサーバ側のsshdで古いアルゴリズムを切ったりしたのかなと思ったのだけれども、ググった感じだとクライアント側つまり macOS をアップグレードすると発生するエラーということがわかった。

鍵を作り直そうか考えたけれども、GitHubもこの鍵だった気がするし影響範囲が見積もれないので積みタスクにしてワークアラウンドすることにした。 新しく鍵を作っておいて、使うとき思い出したときとか徐々に代替わりをして2年後くらいに完全移行できればいいのではないかな。

新しい鍵を作っておく

RSA以外だと ed25519 が推奨されるようだ。

$ ssh-keygen -t ed25519 -C "なにか鍵を識別できるためのコメント"

Just don’t use ECDSA/DSA!

古い鍵でどうにかする

~/.ssh/config に下記追記しておけば古い鍵でもつながるようになる。

# https://superuser.com/questions/1749364/git-ssh-permission-denied-in-macos-13-ventura
Host *
    HostKeyAlgorithms +ssh-rsa
    PubkeyAcceptedAlgorithms +ssh-rsa

その他

手元のknown_hostsを見て、今使っているRSAの鍵の長さを確認する。

$ ssh-keygen -l -f ~/.ssh/known_hosts | grep '(RSA)' | cut -d" " -f1
2048
3072
2048

2048bit以上になっていた。あんまり桁数が短いと2004年の時点で破られることがわかっていたんですって。

2004年の時点では、インターネットで公募した数多くのPCを用いると512ビット程度の数なら素因数分解できるので、RSA暗号に使用する法 n は1024-4096ビット(10進数で300-1000桁程度)にすることが推奨されている。

詳解 Terraform 第3版 ―Infrastructure as Codeを実現する
[ad] 詳解 Terraform 第3版 ―Infrastructure as Codeを実現する
Yevgeniy Brikman, 松浦 隼人 (単行本(ソフトカバー))