状況:SSH切断のフラストレーション
想像してみてください。サーバーにSSHで接続しようとしています。新しくプロビジョニングしたばかりのサーバーかもしれないし、しばらく触っていなかった古いサーバーかもしれません。ユーザー名とサーバーのIPアドレスには自信があります。しかし、おなじみのパスワードプロンプトやスムーズなキー認証によるログインではなく、突然接続が切断されてしまいます。少し間を置いた後、混乱させるメッセージが表示され、サーバーがあなたの認証情報を確認しようとしたのかどうかさえ疑問に感じます。
この特定のエラー、Too many authentication failuresは、特に多くのSSHキーを管理しているユーザーや、~/.sshディレクトリが整理されていないユーザーにとって、一般的でイライラする障害です。基本的に、サーバーはあなたに「この単一の接続試行中に、あまりにも多くの異なる方法で本人確認を試みたので、接続を切断します」と伝えているのです。
表示される正確なエラーメッセージ
Received disconnect from 192.168.1.100 port 22:2: Too many authentication failures
Authentication failed.
デバッグプロセス:「多すぎる」謎を解き明かす
「Too many authentication failures」というメッセージに続いて切断された場合、通常はあなたの特定のキーやパスワードが間違っているわけではありません(もちろんその可能性も常にありますが)。そうではなく、あなたのSSHクライアントが、単一の接続試行でサーバーにあまりにも多くの異なる認証方法を提供している可能性が高いです。
サーバーは制限を課しており、それはMaxAuthTries設定(多くのOpenSSHサーバーでは通常6がデフォルトです)によって制御されます。この制限に達すると、サーバーは不審に思い、単に接続を閉じます。
ステップ1:詳細なSSH出力を取得する
SSHの問題をデバッグする最初のステップは、-vフラグ(さらに詳細が必要な場合は複数の-vvv)を追加することです。これにより、クライアントがどのキーを使用しようとしているかを含め、クライアントが正確に何をしているかが表示されます。
ssh -v user@your_server_ip
出力で次のような行を探してください。
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: publickey
debug1: Offering public key: /home/youruser/.ssh/id_rsa RSA SHA256:... agent
debug1: Server accepts key: /home/youruser/.ssh/id_rsa RSA SHA256:...
debug1: Offering public key: /home/youruser/.ssh/id_dsa DSA SHA256:... agent
debug1: Offering public key: /home/youruser/.ssh/id_ecdsa ECDSA SHA256:... agent
debug1: Offering public key: /home/youruser/.ssh/id_ed25519 ED25519 SHA256:... agent
debug1: Offering public key: /home/youruser/.ssh/my_project_key RSA SHA256:... agent
debug1: Offering public key: /home/youruser/.ssh/another_old_key RSA SHA256:... agent
... (more keys being offered)
Received disconnect from 192.168.1.100 port 22:2: Too many authentication failures
Authentication failed.
この出力でクライアントが多数のpublic keyを提供していることが判明した場合、それが根本原因である可能性が高いです。あなたのクライアントは、~/.ssh/ディレクトリで見つかったすべてのキーと、ssh-agentにロードされているすべてのキーを使用しようとしています。その結果、あなたが正しいキーやパスワードを提供する前に、サーバーが内部のMaxAuthTries制限に達してしまいます。
解決策:クライアントの熱意を制限する
根本的な解決策は、SSHクライアントにキーの提供をより選択的に行うよう指示することです。特定の接続に対してどのidentityを使用するかを正確に伝える必要があります。
方法1:identityファイルを明示的に指定する(クイック修正)
単一の接続でこの問題を回避する最も速い方法は、-iフラグを使用して、どのprivate keyファイルを使用するかをSSHに正確に伝えることです。
ssh -i ~/.ssh/path/to/your/correct_private_key user@your_server_ip
例えば、サーバー用のprivate keyが~/.ssh/server_prod_keyである場合:
ssh -i ~/.ssh/server_prod_key your_username@192.168.1.100
これにより、クライアントはその特定のキーのみを提供するように強制され、認証試行の回数が大幅に削減されます。
方法2:SSHクライアントを設定する(恒久的な修正)
特にこのサーバーに頻繁に接続する場合、より恒久的でクリーンな解決策としては、SSHクライアントの設定ファイル~/.ssh/configで動作を設定することです。
~/.ssh/configを作成または編集する: ファイルが存在しない場合は作成します。パーミッションが厳格であることを確認してください(chmod 600 ~/.ssh/config)。- ホストエントリーを追加する: サーバー用のブロックを追加し、
IdentitiesOnly yesとIdentityFileを指定します。
Host your_server_alias
HostName 192.168.1.100
User your_username
IdentitiesOnly yes
IdentityFile ~/.ssh/path/to/your/correct_private_key
# Port 22 # SSHサーバーが異なるポートを使用する場合は、コメントを解除して変更してください
# PreferredAuthentications publickey # オプション:キー認証を優先する
your_server_alias、192.168.1.100、your_username、および~/.ssh/path/to/your/correct_private_keyを実際の値に置き換えてください。
これで、エイリアスを使用して簡単に接続できます。
ssh your_server_alias
ここでIdentitiesOnly yesディレクティブが非常に重要です。これは、SSHクライアントに対し、IdentityFileを介してそのホスト用に明示的に設定された認証identityファイルのみを使用するよう指示します。つまり、ssh-agentにロードされたキーや、~/.ssh/で見つかる他のデフォルトのidentityファイルを無視します。
方法3:SSHエージェントを管理する(該当する場合)
ssh-agentを使用しており、多くのキーをロードしている場合、クライアントがそれらすべてを提供している可能性があります。エージェントにロードされているキーを管理できます。
- ロードされているキーをリスト表示する:
ssh-add -l
- **エージェントからすべてのキーを削除する:** (エージェントを使用するすべての現在の接続に影響するため、注意して使用してください)
```bash
ssh-add -D
- 必要な特定のキーのみを追加する:
ssh-add ~/.ssh/path/to/your/correct_private_key
この方法は、主な問題が散らかった`~/.ssh`ディレクトリやクライアントのデフォルトの動作ではなく、過剰に詰め込まれた`ssh-agent`に起因する場合に特に役立ちます。
### サーバー側の考慮事項(このエラーでは一般的ではない)
このエラーは主にクライアント側の問題ですが、サーバー側の設定である`/etc/ssh/sshd_config`内の`MaxAuthTries`を簡単に理解しておく価値はあります。この設定は、サーバーが接続ごとに許可する認証試行の最大数を決定します。
デフォルト値は通常6です。したがって、クライアントが例えば10個のキーを送信するように設定されている場合、必然的にこの制限に達します。しかし、特定の「Too many authentication failures」メッセージの場合、クライアントが多すぎるオプションを提供していることがほとんど常に原因です。
サーバー側でこれを変更する場合(セキュリティを低下させる可能性があり、強力な理由がない限り一般的には推奨されません):
```ini
# サーバー上で /etc/ssh/sshd_config を編集
MaxAuthTries 10 # この値を増やし、sshdを再起動する
sshd_configを変更した後は、SSHデーモンを再起動することを忘れないでください。
sudo systemctl restart sshd # systemdベースのシステムの場合
# または
sudo service sshd restart # 以前のinitシステムの場合
繰り返しますが、これはToo many authentication failuresの主な修正方法となることはめったにありません。通常、これはクライアントが多すぎる異なるキーを送信していることを意味し、単に1つのキーで繰り返し失敗しているわけではありません。
検証:修正の確認
上記の解決策のいずれか(できれば方法1または2)を適用した後、再度サーバーに接続してみてください。
ssh user@your_server_ip # 一時的な対応として方法1を使用した場合
# または
ssh your_server_alias # ~/.ssh/configで方法2を使用した場合
修正がうまくいった場合、SSHキーのパスフレーズ(キーに設定されている場合)を求められるか、直接サーバーにログインできるはずです。あるいは、キー認証が設定されていないか、正しいキーでの認証が失敗した場合は、パスワードを求められるかもしれません。
教訓と予防策
~/.sshを整理整頓する:~/.sshディレクトリを定期的に見直しましょう。古くなった、使用されていない、または重複するキーペアは削除してください。散らかった~/.sshディレクトリは、このエラーの一般的な原因です。- SSH Configを明示的に使用する: 接続する各ホストに対して
IdentitiesOnly yesとIdentityFileを含む~/.ssh/configを使用することは、ベストプラクティスです。このアプローチにより、接続が予測可能になり、この特定のエラーを効果的に防ぐことができます。 - SSHエージェントを理解する:
ssh-agentを使用している場合、ロードされているキーの数に注意してください。便利ではありますが、多すぎるとこの問題につながる可能性があります。 - キーを安全に保つ: プライベートキーは常に強力なパスフレーズで保護してください。
ツール推奨:強力なパスワードとセキュリティのために
サーバーアクセスにはSSHキーが一般的に推奨されますが、初期設定、システムアカウント、その他の関連サービスには強力なパスワードが必要になる場合があります。本当にランダムで堅牢なパスワードを生成する必要がある場合、私はよくToolCraftのパスワードジェネレーターを利用します。
これはシンプルなブラウザベースのツールで、すべての生成プロセスがローカルで処理されるため、データがブラウザから離れることがなく、プライバシーの面で大きな利点があります。次のURLで見つけることができます:https://toolcraft.app/en/tools/security/password-generator。堅牢な認証情報が必要なあらゆる状況で、ツールキットに加えておくと便利なユーティリティです。

