はじめに
SSHできないうえにCloudWatchにもログが出ていない場合、
「そもそもEC2に通信が届いていない」可能性があります。
AWSのEC2にSSH接続しようとして、こんな状況にはまりました。
- SSH接続できない
- CloudWatchを見てもログが出ていない
「ログが出ていない=何も起きていない?」と思いましたが、
実際に検証してみるとそうではありませんでした。
本記事では、EC2へのSSH接続を意図的に失敗させ、
CloudWatchにどのようなログの違いが出るのか確認します。
まとめ
| 状態 | エラー | ログ | EC2到達 |
|---|---|---|---|
| 成功 | Accepted | ⭕ 出る | ⭕ |
| 鍵違い | Permission denied | ⭕ 出る(preauth) | ⭕ |
| ユーザー違い | Permission denied | ⭕ 出る(Invalid user/preauth) | ⭕ |
| 接続未許可 | timed out | ❌ なし | ❌ |
ログの有無を見ることで、「EC2に到達しているかどうか」を判断できます。
※環境によってログの出力内容は異なる場合があります
なぜこの違いが起きるのか
ポイントは「接続がどこで失敗しているか」です。
- ネットワークで遮断 → EC2に届かない → ログなし
- OSまで到達 → 認証で失敗 → ログあり
つまり、
ログが出る=サーバーには到達している
ということになります。
検証環境
- EC2(Amazon Linux2)
- 鍵認証(.pem)
- CloudWatchでログ収集
検証①:SSH接続成功
ssh -i key.pem ec2-user@<IP>
ログ
Accepted publickey for ec2-user from xxx.xxx.xxx.xxx port xxxxx ssh2
→SSH接続および認証が正常に完了している状態。
検証②:鍵違い(認証失敗)
ssh -i testkey ec2-user@<IP> # 正しい形式の鍵だがEC2に未登録
エラー
Permission denied (publickey)
ログ
Connection reset by xxx.xxx.xxx.xxx port xxxxx [preauth]
考察
SSH接続自体はEC2に到達しているが、公開鍵認証に失敗し、
認証処理の途中で接続が切断されている。
※環境によっては Failed publickey などのログになる場合もある
検証③:ユーザー違い
ssh -i key.pem ubuntu@<IP>
エラー
Permission denied (publickey)
ログ
Invalid user ubuntu from xxx.xxx.xxx.xxx port xxxxx
考察
EC2には到達しているが、指定したユーザーが存在しないため認証前に拒否されている。
検証④:SSH未許可(セキュリティグループ由来)
エラー
ssh: connect to host <IP> port 22: Connection timed out
ログ
→ なし
考察
セキュリティグループでSSH通信が遮断されており、リクエストはEC2に到達していない。
そのためログは一切出力されない。
おわりに
SSH接続エラーは種類が似ていて分かりにくいですが、
ログの有無を見ることで、原因の切り分けが容易になります。
同じようにハマった方の参考になれば幸いです。