web-dev-qa-db-ja.com

Amazon EC2インスタンスへのSSH接続時に接続がタイムアウトしました

EC2インスタンスの1つで数日以来、接続がタイムアウトしました。

以前はSSHに接続できましたが、突然機能しなくなりました。サーバーはまだ稼働しており、HTTPSは正常に機能し、ブラウザーを介してサービスにアクセスできますが、SSHを実行できません。

これまでに試した手順は次のとおりです。

  • キーペアを使用したPAC(Linux SSHクライアント)からのSSH:タイムアウトの取得。これは以前は機能していましたが、接続は変更されませんでした
  • パブリックホストを使用して別のEC2インスタンスからSSHします。タイムアウトになる
  • プライベートIPを使用して別のEC2インスタンスからSSHで接続します。タイムアウトになる
  • 次に、インスタンスを停止/起動し、新しいIPを取得し、ルート53の情報を変更しました。サイトは復旧して稼働していますが、上記の手順でSSHを実行しても機能しません。
  • セキュリティグループをチェックし(何らかの理由で変更された場合)、ポート22が受信を許可されている。同じセキュリティグループが、正常に動作する別のインスタンスで使用されています。
  • また、念のため、グループにIPを追加しましたが、それでも機能しません。同じアベイラビリティーゾーンに4つのインスタンスがありますが、問題のあるIPの範囲は異なります(以前も異なっていました)問題のあるパブリックIPは35.182で始まります。他の機能する3つのインスタンスのパブリックIPは99.79で始まります。

以下のリンクにあるトラブルシューティング手順を実行しました: https://docs.aws.Amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html

インスタンスへの接続エラー:接続がタイムアウトしました

  1. セキュリティグループルールを確認します。適切なポートでパブリックIPv4アドレスからのインバウンドトラフィックを許可するセキュリティグループルールが必要です。 上記のように、接続されたセキュリティグループにはポート22の受信が許可されています
  2. サブネットのルートテーブルを確認します。 VPCの外部に向かうすべてのトラフィックをVPCのインターネットゲートウェイに送信するルートが必要です。 VPCにインターネットゲートウェイが接続されています(他のインスタンスと同じVPC)
  3. サブネットのネットワークアクセスコントロールリスト(ACL)を確認します。ネットワークACLは、適切なポートのローカルIPアドレスからの受信トラフィックと送信トラフィックを許可する必要があります。 デフォルトのネットワークACLは、すべての受信および送信トラフィックを許可します。チェックするとデフォルト設定が使用され、すべてのトラフィックとポートが0.0.0.0/0に対して許可されます
  4. コンピューターが企業ネットワーク上にある場合は、ネットワーク管理者に内部ファイアウォールがポート22(Linuxインスタンスの場合)またはポート3389(Windowsインスタンスの場合)でコンピューターからの受信および送信トラフィックを許可するかどうかを確認してください。コンピューターにファイアウォールがある場合は、ポート22(Linuxインスタンスの場合)またはポート3389(Windowsインスタンスの場合)でコンピューターからの送受信トラフィックを許可していることを確認してください。 他のインスタンスに接続できますが、これは関係ありません。
  5. インスタンスにパブリックIPv4アドレスがあることを確認します。そうでない場合は、Elastic IPアドレスをインスタンスに関連付けることができます。詳細については、「Elastic IPアドレス」を参照してください。インスタンスにはパブリックipv4アドレスが含まれ、パブリックDNSもあります。これは、このインスタンスと他のインスタンスの違いを確認できる場所です。この特定のインスタンスは、パブリックIPが35.182で始まる唯一のインスタンスです。他はすべて99.79から始まります。以前は問題ではありませんでしたが、IPも異なっていたので、どういうわけか関連していましたか?
  6. インスタンスのCPU負荷を確認します。 CPU負荷とその他すべては正常で、ピークが維持されていません。

ここに私がやったことのいくつかがあります:

  • ポート22でtelnetを実行中のインスタンスに送信します。問題のないように動作しますが、問題のあるインスタンスへのtelnetは実行されず、単にハングします。
  • iptablesは変更されていません(私が知っている限り、インスタンスに接続できるのは私だけで、私はそれをしませんでした)
  • キーペアの所有者とファイルのアクセス許可が期待される値であることを確認しました
  • クライアントではなくターミナルでSSHを試したところ、同じ結果になった
  • システムログをチェックし(EC2ダッシュボードから取得できます)、エラーはなく、システムは正常に起動し、Apache2が実行され、サイトにアクセスできます。

サーバーはubuntu 18.04を実行しており、更新とデフォルトのアップグレードを行っています。

もう何ができるかわかりませんが、誰か提案や詳細情報が必要な場合は、喜んで提供させていただきます。

ありがとうございました。

3
Cedric Guindon

ポート22のアウトバウンド接続がAWSファイアウォール経由で、マシンのiptablesで許可されているかどうかを確認します。 iptables -nvLを使用して、すべてのiptablesルールを確認できます。

Iptablesの出力チェーンがDROPではなくALLOWに設定されていることを確認するか、出力チェーンの新しく確立された関連接続を許可する適切なルールが構成されていることを確認してください。

または、netstat -nplを実行して、SSHが正確にリッスンしている場所を確認します。それを後で変更された非弾性IPアドレスにバインドした場合、問題が発生します。

編集:SSH経由でコマンドを発行するアクセス権がないと述べたので、AWSコンソールを使用してこれらを発行し、それらの出力を観察できます。

https://docs.aws.Amazon.com/systems-manager/latest/userguide/rc-console.html

1
nick064