更新: 2026年03月 · 9 分で読める · 4,331 文字
EC2へのSSH接続が失敗する原因を特定し、5分で解決する方法
このブログでは、AWS EC2インスタンスへのSSH接続が失敗する際の原因特定から解決までを、実践的なチェックリスト形式で解説します。セキュリティグループ設定、キーペアの権限、インスタンスの状態確認など、よく見落とされる項目を順番に診断することで、最短で接続を復旧できます。
SSH接続失敗の主な原因と優先順位
EC2への SSH接続ができない場合、以下の優先度順に確認していくことが効率的です。大半のケースは上位3項目で解決します。
- インスタンスが実行中か確認(stopped状態だと接続不可)
- セキュリティグループのインバウンドルール(ポート22許可が必須)
- 秘密鍵ファイルの権限(600以下である必要あり)
- ネットワークインターフェイス(ENI)の状態
- キーペアと秘密鍵の一致
ステップ1: インスタンスの基本状態を確認する
AWSコンソールでの確認方法
まずはインスタンスが起動しているか、ネットワークが正常か確認します。
- AWSマネジメントコンソールにサインイン
- EC2ダッシュボード → インスタンス一覧を開く
- 対象インスタンスの「インスタンスの状態」が「running」であることを確認
- 「ステータスチェック」の項目で「2/2チェック合格」と表示されていることを確認
インスタンスが「stopped」状態の場合は、インスタンスを選択して「インスタンスの状態 → 開始」をクリックして起動させてください。
CLIでの確認方法
AWSコマンドラインツールがインストール済みの場合、以下で状態確認が可能です。
# インスタンスの状態確認
aws ec2 describe-instances \
--instance-ids i-0123456789abcdef0 \
--query 'Reservations[0].Instances[0].[InstanceId,State.Name,PublicIpAddress]' \
--output table
# 出力例:
# | InstanceId | State | PublicIpAddress |
# | i-0123... | running | 203.0.113.45 |
ステップ2: セキュリティグループのインバウンドルールを確認
セキュリティグループの設定確認
SSH接続にはポート22への通信許可が必須です。セキュリティグループの設定を確認してみましょう。
- EC2インスタンスの詳細画面を開く
- 「セキュリティ」タブ → セキュリティグループ名をクリック
- 「インバウンドルール」タブを選択
- 以下のような SSH ルールが存在することを確認:
- プロトコル: TCP
- ポート範囲: 22
- ソース: 0.0.0.0/0(任意のIPから許可)または特定のIP CIDR
SSH ルールが見当たらない場合、以下の手順で追加します。
# AWS CLIでセキュリティグループのインバウンドルール追加
aws ec2 authorize-security-group-ingress \
--group-id sg-0123456789abcdef0 \
--protocol tcp \
--port 22 \
--cidr 0.0.0.0/0
# 実行後、成功メッセージが表示されます
# {
# "Return": true,
# "SecurityGroupRules": [...]
# }
セキュリティに関する注意: 本番環境では 0.0.0.0/0(すべてのIPを許可)ではなく、あなたのIPアドレスまたは組織のネットワークCIDRに限定することを推奨します。例: 203.0.113.0/24
ステップ3: 秘密鍵ファイルの権限を修正する
よくあるハマりポイント: 秘密鍵の権限が緩い場合
秘密鍵のファイル権限が 600 より緩い(777や644など)場合、SSH は接続を拒否します。以下のコマンドで権限を確認・修正してください。
# 秘密鍵の権限確認
ls -l ~/.ssh/my-key-pair.pem
# 出力例(権限が644の場合 - これはNG):
# -rw-r--r-- 1 user group 1674 Jan 10 10:00 my-key-pair.pem
# 権限を600に修正
chmod 600 ~/.ssh/my-key-pair.pem
# 修正後の確認
ls -l ~/.ssh/my-key-pair.pem
# -rw------- 1 user group 1674 Jan 10 10:00 my-key-pair.pem ✓
権限が正しくない場合、以下のようなエラーが発生します:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'my-key-pair.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
ステップ4: SSH接続テストとトラブルシューティング
詳細なデバッグ情報を表示してSSH接続
接続がまだ失敗する場合、-v オプションで詳細ログを表示して原因を特定します。
# 基本的なSSH接続コマンド
ssh -i ~/.ssh/my-key-pair.pem ec2-user@203.0.113.45
# 詳細なデバッグ情報を表示(1段階)
ssh -v -i ~/.ssh/my-key-pair.pem ec2-user@203.0.113.45
# より詳細なデバッグ情報を表示(3段階)
ssh -vvv -i ~/.ssh/my-key-pair.pem ec2-user@203.0.113.45
よく出現するエラーメッセージと対応策
エラー: "Permission denied (publickey)"
- 秘密鍵のパス指定が誤っている → パスを再確認
- キーペアと秘密鍵が一致していない → キーペアを再作成
- インスタンスの初期ユーザー名が誤っている → ec2-user、ubuntu、admin など OS により異なる
エラー: "Connection refused" または "No route to host"
- セキュリティグループにポート 22 のインバウンドルールがない → ステップ2を確認
- インスタンスがprivateサブネットにあり、NAT Gateway がない → パブリックサブネットへ移行
エラー: "Connection timed out"
- ネットワークACLでTCPポート22が拒否されている → NACLを確認・修正
- VPC外からの接続で Elastic IP が割り当てられていない → Elastic IP を割り当て
インスタンスのOSユーザー名を確認する
AMI の種類によりデフォルトユーザー名が異なります。よく使用される値を以下に示します。
| AMI | デフォルトユーザー名 |
|---|---|
| Amazon Linux 2 | ec2-user |
| Ubuntu | ubuntu |
| Red Hat Enterprise Linux (RHEL) | ec2-user |
| CentOS | centos |
| Debian | admin |
ステップ5: ネットワーク周辺の設定を確認
Elastic IPの確認と割り当て
プライベートサブネットのインスタンスへ接続する場合、Elastic IP の割り当てまたは踏み台サーバ(Bastion Host)経由での接続が必要です。
# Elastic IPを割り当て(AWS CLI)
aws ec2 allocate-address --domain vpc
# 出力例
# {
# "InstanceId": "i-0123456789abcdef0",
# "PublicIp": "203.0.113.45",
# "AllocationId": "eipalloc-0123456789abcdef0",
# ...
# }
# Elastic IPをインスタンスに関連付け
aws ec2 associate-address \
--instance-id i-0123456789abcdef0 \
--allocation-id eipalloc-0123456789abcdef0
ネットワークACLの確認
VPC のネットワークACLがポート 22 への通信をブロックしている可能性があります。
- EC2インスタンスの詳細画面 → 「ネットワークインターフェイス」セクションをクリック
- ENI の詳細ページ → 「ネットワークACL」タブを開く
- インバウンドルールに TCP ポート 22 の許可ルールが存在することを確認
実行環境でのトラブルシューティング実例
テスト環境: macOS 14.2 / AWS CLI 2.13.5 / Amazon Linux 2 AMI
以下は、筆者が実際に遭遇した接続失敗と解決策です。
# 初期接続試行(失敗)
$ ssh -i ~/keys/my-key.pem ec2-user@203.0.113.45
ssh: connect to host 203.0.113.45 port 22: Connection refused
# 原因特定:セキュリティグループの確認
$ aws ec2 describe-security-groups \
--group-ids sg-0123456789abcdef0 \
--query 'SecurityGroups[0].IpPermissions' \
--output table
# SSH ルールが見当たらず
# 対応:SSH ルールを追加
$ aws ec2 authorize-security-group-ingress \
--group-id sg-0123456789abcdef0 \
--protocol tcp --port 22 --cidr 0.0.0.0/0
# 再試行(成功)
$ ssh -i ~/keys/my-key.pem ec2-user@203.0.113.45
[ec2-user@ip-10-0-1-100 ~]$ ✓
使うべき場面と使うべきでない場面
EC2 SSH接続を使うべき場面
- アプリケーションログの確認やトラブルシューティングが必要な場合
- セキュリティグループやネットワーク設定を動的に変更する必要がある場合
- 開発・テスト環境で頻繁にインスタンスにアクセスする場合
別の方法を検討すべき場面
- 本番環境での頻繁な管理作業 → AWS Systems Manager Session Manager の使用を推奨(キーペア不要)
- 複数インスタンスへの同時コマンド実行 → AWS Systems Manager Run Command を検討
- ログ取得が主目的 → CloudWatch Logs への集約を推奨
よくある質
おすすめ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.