【AWS】EC2 インスタンス SSH接続エラーを解消(ssh: connect to host xxx.xxx.xxx.xxx port 22: Operation timed out)


はじめに

Rails アプリをAWSにてデプロイしようと試みていた過程でEC2サーバにローカル環境からアクセス(SSH接続)しようとした際に、突然アクセスできなくなる、というトラブルに遭遇したので解決方法とともに残します。
(かなり初歩的な部分かと思います。)

原因は場所を移動して作業したこと(接続場所によりIPアドレスが相違していたこと)にありました。
以下で詳細について書きます。

※筆者はMacを使っており、接続方法はMacの仕様で行なっております。

どのようなエラーが起きたのか?

ローカル環境(MacBookAir)から、該当のEC2インスタンスにSSHキーを使って、SSH接続を試みる。

# ターミナルにて

$ ssh -i .ssh/ファイル名.pem [email protected](該当EC2インスタンスのパブリックIP)

ssh: connect to host xxx.xxx.xxx.xxx port 22: Operation timed out

すると、「接続操作がタイムアウトした」という内容のエラーメッセージが出てきて接続できない。

さっき(1時間程前)まで接続できていたのになぜ?!!

となった。

エラー原因

元作業していた場所から、カフェに移動して作業を開始し、その際に起きたエラー。
該当EC2インスタンスのセキュリティグループ、SSH接続設定と自分の接続元(IPアドレス)に問題があった

もう少し具体的にいうと、
元いた場所にて最初の設定で、該当EC2インスタンスのセキュリティグループのインバウンドルールのSSH接続のソース(接続元)を「マイIP」に限定していた。これにより、その作業場所のIPアドレスからでないとSSH接続ができない設定がされる
自分が元作業していた場所を移動して、移動先のwifiで作業を開始しSSH接続をしようとしたところ、ソース(接続元のIP)が変わってしまったため、接続元の許可がされておらずエラーが起きた

解決方法

その接続元の許可設定を移動先のIPアドレスに合わせて設定し直した。

①AWS該当EC2インスタンスのセキュリティグループから、「インバウンドルールを編集」をクリック
②タイプ:SSH の ソースで再度「マイIP」を選び直す。
③ルールを保存をクリック

こうすることで、作業中の場所のIPアドレスからSSH接続を許可したことになるため、接続可能になった。

$ ssh -i .ssh/ファイル名.pem [email protected](該当EC2インスタンスのパブリックIP)

[ec2-user@ip-xx-xx-xx-xx ~]$

最後に

SSHキーを所有しているため、セキュリティグループのインバウンドルールを「任意の場所」にすることでもまず不正に利用されるようなことはないと思いますが、「マイIP」に限定しておいた方が無難だと思います(万が一、キーが流出した際の危険性なども考慮して)。
ただ、接続元(場所、wifiなど)を変更した際にこの作業を毎回しなければならないので少し面倒です。

このエラーに遭遇したことでまた少し、ネットワークについても勉強になりました。

誤り、ご指摘等ありましたら気軽にコメント等いただけると幸いです。
ありがとうございました。