Skip to content

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鍵の切り替え⭐️⭐️⭐️⭐️⭐️長期的な解決策
新規環境構築時
サーバー設定更新⭐️⭐️⭐️⭐️サーバー管理者権限がある場合
特定ホストへの設定⭐️⭐️⭐️一時的な接続が必要な場合
全ホスト許可設定⭐️緊急時のみ(即時解除推奨)

技術的背景

結論

  1. 最優先:新しいed25519鍵への移行がセキュリティと互換性の面で最適
  2. 一時的な回避策(PubkeyAcceptedKeyTypes=+ssh-rsa)はあくまで応急処置
  3. 古い鍵を延長使用しないことが長期的なセキュリティ確保の鍵
  4. サーバー管理者は定期的に/etc/ssh/sshd_configを見直し、安全なアルゴリズムのみを許可

アップデート頻度の高いmacOS環境では、最新のセキュリティ基準に合わせた鍵管理が不可欠です。