更新: 2026年03月 · 8 分で読める · 4,131 文字
EC2へのSSH接続が失敗する原因を特定し、5分で復旧させる方法
AWS EC2インスタンスへのSSH接続エラーは、セキュリティグループ設定、キーペア権限、インスタンスの状態など複数の原因が考えられます。この記事では、最も一般的な7つの原因と実践的な解決手順を紹介します。これらの対策を順に実施すれば、ほぼすべてのSSH接続問題を解決できます。
SSH接続エラーの診断フロー
まず、以下のコマンドで接続を試みます。エラーメッセージを記録してください。
# 詳細ログを表示して接続を試みる
ssh -vvv -i /path/to/key.pem ec2-user@your-instance-public-ip
-vvvフラグで詳細なデバッグ情報が表示され、問題の特定が容易になります。表示されるエラーメッセージから、以下の原因のいずれかを判定します。
原因1: セキュリティグループのインバウンドルール設定ミス
症状と確認方法
「Connection timed out」や「No route to host」と表示される場合、セキュリティグループでSSHポート(22番)がブロックされている可能性があります。
AWS管理コンソールで以下を確認してください:
- EC2インスタンスの詳細ページから「セキュリティグループ」を確認
- 「インバウンドルール」タブを開く
- プロトコルがTCP、ポートが22、ソースが適切に設定されているか確認
解決手順
セキュリティグループが正しく設定されていない場合、ルールを追加します:
- AWS管理コンソールから該当のセキュリティグループを選択
- 「インバウンドルール」→「ルールを編集」をクリック
- 「ルールを追加」をクリック
- 以下のように設定:
- タイプ:SSH
- プロトコル:TCP
- ポート範囲:22
- ソース:自分のIPアドレス(
xxx.xxx.xxx.xxx/32)または特定のセキュリティグループ
- 「ルールを保存」をクリック
セキュリティベストプラクティス: 0.0.0.0/0(すべてのIPアドレス)からのアクセスを許可するのは避けてください。必ず特定のIPまたは社内ネットワークに限定してください。
原因2: キーペアファイルのパーミッション設定エラー
症状と確認方法
「Permission denied (publickey)」というエラーが出る場合、キーペアファイルのパーミッションが正しくない可能性があります。
以下のコマンドでファイルのパーミッションを確認してください:
ls -la /path/to/key.pem
正しいパーミッションは-rw-------(600)です。他の形式(640、644など)ではSSH接続が拒否されます。
解決手順
# キーペアのパーミッションを600に設定
chmod 600 /path/to/key.pem
# 確認
ls -la /path/to/key.pem
# -rw------- 1 user group 1697 Dec 10 14:00 /path/to/key.pem
Windowsユーザーの場合、GitBashやPowerShellで同様の設定が可能です。
原因3: インスタンスのパブリックIPアドレスが割り当てられていない
症状と確認方法
「Could not resolve hostname」というエラーが出る場合、インスタンスにパブリックIPが割り当てられていない可能性があります。
AWS管理コンソールで確認する方法:
- EC2ダッシュボード→「インスタンス」を選択
- 対象インスタンスをクリック
- 詳細ページの「パブリックIPv4アドレス」フィールドを確認
- 「割り当てなし」と表示されている場合、パブリックIPが未割り当て
解決手順
Elastic IPアドレスを割り当てる方法:
- 左メニューから「ネットワークとセキュリティ」→「Elastic IP」を選択
- 「Elastic IPアドレスを割り当てる」をクリック
- デフォルト設定のまま「割り当てる」をクリック
- 割り当てたElastic IPを選択し、「アクション」→「アドレスの関連付け」をクリック
- インスタンスを選択して「関連付ける」をクリック
# AWS CLIで確認する方法
aws ec2 describe-instances --instance-ids i-1234567890abcdef0 \
--query 'Reservations[0].Instances[0].[PublicIpAddress,PrivateIpAddress]'
原因4: キーペアのホストキー検証エラー
症状と確認方法
「Host key verification failed」というメッセージが表示される場合、known_hostsファイルに該当ホストの公開鍵が登録されていません。
解決手順
# 初回接続時に自動的にホストキーを追加
ssh -o StrictHostKeyChecking=accept-new -i /path/to/key.pem ec2-user@your-instance-public-ip
# または、known_hostsから該当エントリを削除して再接続
ssh-keygen -R your-instance-public-ip
ssh -i /path/to/key.pem ec2-user@your-instance-public-ip
原因5: インスタンスが実行中でない、またはステータスチェック失敗
症状と確認方法
AWS管理コンソールで以下を確認してください:
- インスタンスのステータス(緑色の「running」であることを確認)
- ステータスチェック結果(システムステータスチェック、インスタンスステータスチェックが「passed」であることを確認)
「impaired」や「stopped」と表示されている場合、インスタンスが正常に起動していません。
解決手順
# AWS CLIでインスタンス状態を確認
aws ec2 describe-instances --instance-ids i-1234567890abcdef0 \
--query 'Reservations[0].Instances[0].[State.Name,InstanceStatus.SystemStatus.Status]'
# インスタンスが停止している場合は起動
aws ec2 start-instances --instance-ids i-1234567890abcdef0
ステータスチェックが「failed」の場合、通常インスタンスの再起動が必要です:
aws ec2 reboot-instances --instance-ids i-1234567890abcdef0
原因6: キーペアファイルの形式が正しくない
症状と確認方法
古い形式のキーペア(PuTTYやその他ツールで生成)を使用している場合、OpenSSHフォーマットに変換が必要な場合があります。
# キーペアのフォーマットを確認
head -1 /path/to/key.pem
# OpenSSH形式の場合:-----BEGIN OPENSSH PRIVATE KEY-----
# PEM形式の場合:-----BEGIN RSA PRIVATE KEY-----
解決手順
PEM形式をOpenSSH形式に変換する場合:
ssh-keygen -p -N "" -m pem -f /path/to/key.pem
逆に、OpenSSH形式をPEM形式に変換する場合:
ssh-keygen -p -N "" -m pem -f /path/to/key.pem
原因7: ユーザー名が誤っている
症状と確認方法
「Permission denied (publickey)」が表示される場合、SSH接続時のユーザー名が正しくない可能性があります。AMI(Amazon Machine Image)によってデフォルトユーザーが異なります。
| AMIの種類 | デフォルトユーザー |
|---|---|
| Amazon Linux 2 | ec2-user |
| Ubuntu | ubuntu |
| CentOS | centos |
| RHEL | ec2-user |
| Windows | RDPを使用(SSHではない) |
解決手順
# Amazon Linux 2の場合
ssh -i /path/to/key.pem ec2-user@your-instance-public-ip
# Ubuntuの場合
ssh -i /path/to/key.pem ubuntu@your-instance-public-ip
# CentOSの場合
ssh -i /path/to/key.pem centos@your-instance-public-ip
トラブルシューティングのチェックリスト
以下の順序で確認してください。多くの場合、この順序で問題が特定できます。
# 1. インスタンスが実行中か確認
aws ec2 describe-instances --instance-ids i-1234567890abcdef0 \
--query 'Reservations[0].Instances[0].State.Name'
# 2. パブリックIPアドレスを確認
aws ec2 describe-instances --instance-ids i-1234567890abcdef0 \
--query 'Reservations[0].Instances[0].PublicIpAddress'
# 3. セキュリティグループを確認
aws ec2 describe-security-groups --group-ids sg-1234567890abcdef0 \
--query 'SecurityGroups[0].IpPermissions'
# 4. キーペアのパーミッションを確認
ls -la /path/to/key.pem
# 5. 詳細ログで接続を試みる
ssh -vvv -i /path/to/key.pem ec2-user@your-instance-public-ip
よくある質問
このエラーは通常、ネットワークの断続的な問題またはセッションタイムアウトを示しています。クライアント側のSSH設定でキープアライブ間隔を調整してください。
おすすめAWSリソース
- AWS Documentation Detailed specs and best practices for every AWS service.
- AWS Skill Builder Free official learning platform. Great for certification prep.
- AWS Pricing Calculator Official tool for estimating costs before deployment.