システム開発や保守において、AWSのEC2に対してSSH接続ができないという問題に直面することは珍しくありません。
特に、同じ秘密鍵と同じユーザー名を用いて、複数の端末から同時に接続を試みる場合や、Visual Studio Codeの拡張機能を使っている場合などに、接続タイムアウトというエラーが発生することがあります。
本記事では、こうした状況で考えられる原因と、実務において有効な対策を詳しく解説します。
SSH接続のタイムアウトはなぜ発生するのか
SSH接続時に表示される「接続がタイムアウトしました」や「応答がありません」というエラーは、以下のような要因によって引き起こされます。
ネットワークの問題
- クライアント端末のインターネット接続が不安定
- プロキシやファイアウォールが22番ポートの通信を遮断している
この場合、ローカル端末からターミナルを使って以下のコマンドを実行し、直接接続できるかを確認します。
1 |
ssh -i /path/to/key.pem ユーザー名@接続先ホスト |
ここで接続できない場合は、まずネットワーク設定を確認する必要があります。
セキュリティグループの設定ミス
EC2のインスタンスには、通信を制御するためのセキュリティグループが設定されています。
ここでSSH(22番ポート)が許可されていないと、外部から接続することはできません。
- インバウンドルールに自分の端末のIPアドレスが含まれているか
- 0.0.0.0/0などで広く開放されている場合、セキュリティリスクを伴うため慎重に判断する
ホスト名や秘密鍵の設定ミス
接続先を指定するホスト名や、秘密鍵のファイルパス、ユーザー名が誤っていると接続は失敗します。
以下のような設定ファイル(~/.ssh/config
)を使って定義すると、誤りを減らすことができます。
1 2 3 4 |
Host 接続名 HostName ホストのIPまたはドメイン User ユーザー名 IdentityFile /path/to/key.pem |
EC2インスタンスの状態確認
インスタンスが停止していたり、負荷が高すぎたりすると、接続ができなくなる場合があります。
- AWSマネジメントコンソール上で状態が「稼働中」か確認する
- CloudWatchでCPU使用率やメモリの負荷を確認する
ログインの失敗が続いたときに一時的に接続が制限されるか?
結論から言うと、AWSやEC2の標準設定では、SSHの連続失敗によるログイン制限は自動的に発生しません。
つまり、認証に失敗したからといって特定の時間接続不能になることはありません。
ただし、以下のような設定やツールが導入されていると、接続が制限される場合があります。
Fail2Banのような不正アクセス対策ツールの影響
Linuxサーバに導入されることがあるFail2Banは、SSH認証の失敗回数に応じてIPアドレスを自動でブロックするツールです。
一定回数以上の失敗があると、一時的に接続できなくなります。
ブロックされているかどうかを確認するには、次のようなコマンドを実行します。
1 |
sudo fail2ban-client status sshd |
ブロックを解除するには以下のようにします。
1 |
sudo fail2ban-client unban IPアドレス |
OSレベルの認証試行制限
/etc/ssh/sshd_config
ファイルにあるMaxAuthTriesという設定が影響する場合もあります。
これは、SSH接続時の認証試行回数を制限するもので、通常は以下のように設定されています。
1 |
MaxAuthTries 6 |
この回数を超えると、その接続が切断されますが、IPアドレス全体がブロックされるわけではありません。
iptablesによる手動ブロック
特定のIPアドレスに対して手動で接続拒否を設定しているケースもあります。
これを確認するには、以下のコマンドを使用します。
1 |
sudo iptables -L -n |
不要なルールが存在する場合は削除することで接続可能になる場合があります。
UFWによる接続ブロック(Ubuntuの場合)
Ubuntuを使用している環境では、iptablesの代わりにUFWが導入されていることが一般的です。
UFWはシンプルな操作でファイアウォール設定を行うことができ、誤ったルールによってSSH接続がブロックされることがあります。
現在のルールを確認するには以下のコマンドを使います。
1 |
sudo ufw status numbered |
このコマンドで一覧表示されるルールの中に、22番ポート(SSH)を拒否しているものがあれば、その行を削除することで接続が回復する可能性があります。
特定のルールを削除するには、表示された番号を指定して以下のように実行します。
1 |
sudo ufw delete 番号 |
また、SSH接続を許可するルールを明示的に追加したい場合は以下のコマンドを使用します。
1 2 3 |
sudo ufw allow ssh または、 sudo ufw allow 22 |
ルールの変更後はUFWの状態を再度確認し、不要なブロックが存在しないことを確認してください。
実際に接続できなくなったときの調査手順
- ターミナルから直接接続を試す(鍵やユーザー名の確認)
- セキュリティグループの設定確認(IPアドレスの許可)
- インスタンスの状態やリソースの状況確認(CPU負荷など)
- Fail2Banやiptablesによるブロック確認
- VS Codeの拡張機能を使っている場合は一度キャッシュを削除して再接続
まとめ
SSH接続のタイムアウトや接続不能の問題は、表面的には同じでも、原因は多岐にわたります。
特に、同じ鍵とユーザー名で複数端末から接続する場合や、接続設定のミス、セキュリティ機構による自動ブロックが関係していることがあります。
本記事で紹介した内容をもとに、ネットワーク接続の確認、セキュリティ設定の見直し、Fail2Banやiptablesの確認を行うことで、接続問題の多くは解決できます。
安定したSSH接続は、システムエンジニアにとって日常業務を支える基盤です。
設定や仕組みを正しく理解して、トラブルが発生した際にも迅速に対応できるようにしておきましょう。
コメント