AWS初心者が必ず一度はハマる「EC2にSSHで繋がらない」。原因は決まっているので、切り分けチェックリストにまとめました。
上から順に確認する
SSH接続できない原因は、だいたい次のどれかです。ネットワークの経路順に、上から潰していきます。
1. セキュリティグループ(最頻出)
インバウンドでSSH(TCP 22)が許可されているか。しかも、自分の接続元IPから許可されているか。
- SGのインバウンドに「22番 / ソース = 自分のグローバルIP(または 0.0.0.0/0 で一時確認)」があるか
- ここの許可漏れが、体感で一番多い原因です
2. パブリックIPと到達性
- EC2に**パブリックIP(またはElastic IP)**が付いているか
- パブリックサブネットに置かれているか(ルートテーブルに
0.0.0.0/0 → IGWがあるか)
プライベートサブネットのEC2には、そもそも直接SSHできません(踏み台やSSMが必要)。
3. ネットワークACL
- サブネットのNACLで、インバウンド22とアウトバウンドの戻り(エフェメラルポート 1024-65535)が許可されているか
- NACLはステートレスなので、戻りの許可漏れに注意
4. OS側・鍵
- 正しい**キーペア(.pem)**を使っているか
- ユーザー名は合っているか(Amazon Linuxは
ec2-user、Ubuntuはubuntuなど) - 鍵ファイルのパーミッション(
chmod 400 key.pem)
ssh -i key.pem ec2-user@<パブリックIP>
5. インスタンスの状態
- インスタンスが
runningか - ステータスチェックが通っているか(起動直後は少し待つ)
切り分けのコツ
- SGを一時的に「22番 / 0.0.0.0/0」にして繋がるなら、原因はSG(ソースIP指定ミス)
- タイムアウトなら経路(SG/NACL/IGW/パブリックIP)、
Connection refusedならOS側やsshd Permission deniedなら鍵かユーザー名
エラーメッセージで、ネットワークの問題かOSの問題かが切り分けられます。
まとめ
SSHできない時は「SG(22許可・ソースIP) → パブリックIP/ルート → NACL戻り → 鍵/ユーザー名 → 状態」の順で確認。ほぼこのどこかです。まずはSGのインバウンド22を疑う——これが最短ルートです。