SSH接続エラー「sign_and_send_pubkey: no mutual signature supported」の解決方法
問題の説明
macOS(特にM1チップ搭載機種)でターミナルからSSH接続を試みた際、次のエラーが発生する場合があります:
bash
ssh -i {秘密鍵のパス} user@host
text
sign_and_send_pubkey: no mutual signature supported
user@host: Permission denied (publickey).
この現象の特徴:
- 秘密鍵のパーミッションは正しく設定済み(例:400)
- IntelliJなどのIDEでは接続成功するがターミナルで失敗する
- macOSシステムアップデート後に突然発生
エラーの根本原因
OpenSSH 8.8以降のセキュリティ強化が主な原因です:
- SHA-1ハッシュアルゴリズムの脆弱性に対応
- デフォルトで
ssh-rsa
(RSA+SHA1署名)を無効化 - 古い鍵形式を使用しているクライアント/サーバー間で互換性が失われる
セキュリティ上の注意
SHA-1は現在 安全でない と見なされており、継続使用は推奨されません。一時的な回避策よりも安全な鍵への移行が最良策です。
安全かつ恒久的な解決法(推奨)
方法1:ed25519鍵の生成と切り替え(最新のベストプラクティス)
鍵の生成
bash
# 新しいed25519鍵を生成(-a 100はキー導出の反復回数)
ssh-keygen -t ed25519 -a 100
# 生成されるファイル:
# 秘密鍵: ~/.ssh/id_ed25519
# 公開鍵: ~/.ssh/id_ed25519.pub
公開鍵のサーバー設置
bash
# 公開鍵をリモートサーバーに転送
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host
クライアント設定(~/.ssh/config)
ssh-config
Host *
IdentityFile ~/.ssh/id_ed25519
方法2:サーバー側の設定更新(管理者権限が必要)
サーバーの/etc/ssh/sshd_config
に以下を追記:
config
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
変更後SSHサービスを再起動:
bash
sudo systemctl restart sshd # Linuxの場合
一時的な回避策(緊急用)
方法1:コマンド実行時にオプション指定
bash
ssh -o PubkeyAcceptedKeyTypes=+ssh-rsa -i {鍵ファイル} user@host
方法2:SSH設定ファイルで特定ホスト向けに有効化(~/.ssh/config)
セキュリティ警告
Host *
を使用すると全接続で脆弱なアルゴリズムが許可されます。可能な限り特定ホストのみに制限してください。
ssh-config
host.example.com # 実際のホスト名またはIPに置き換え
PubkeyAcceptedKeyTypes=+ssh-rsa
HostKeyAlgorithms=+ssh-rsa
ssh-config
Host * # 全ホストに適用(セキュリティリスク有)
PubkeyAcceptedKeyTypes=+ssh-rsa
解決策の比較表
方法 | 安全性 | 推奨度 | 適用ケース |
---|---|---|---|
ed25519鍵の切り替え | ⭐️⭐️⭐️⭐️⭐️ | 高 | 長期的な解決策 新規環境構築時 |
サーバー設定更新 | ⭐️⭐️⭐️⭐️ | 中 | サーバー管理者権限がある場合 |
特定ホストへの設定 | ⭐️⭐️⭐️ | 中 | 一時的な接続が必要な場合 |
全ホスト許可設定 | ⭐️ | 低 | 緊急時のみ(即時解除推奨) |
技術的背景
結論
- 最優先:新しい
ed25519
鍵への移行がセキュリティと互換性の面で最適 - 一時的な回避策(
PubkeyAcceptedKeyTypes=+ssh-rsa
)はあくまで応急処置 - 古い鍵を延長使用しないことが長期的なセキュリティ確保の鍵
- サーバー管理者は定期的に
/etc/ssh/sshd_config
を見直し、安全なアルゴリズムのみを許可
アップデート頻度の高いmacOS環境では、最新のセキュリティ基準に合わせた鍵管理が不可欠です。