Tech Hotoke Blog

IT観音とは私のことです。

【AWS】踏み台サーバーからWebサーバーへポートフォワーディングが失敗するようになる現象の処方箋

構成

f:id:TechHotoke:20220130145022j:plain

起きている問題

正常にポートフォワーディングされていたのが、ある日突然、踏み台サーバーにログインした後にwebサーバーへログインしようとすると下記のように失敗するようになった。

  • webサーバー側
kex_exchange_identification: Connection closed by remote host
  • 踏み台サーバー側
channel 3: open failed: connect failed: No route to host

ssh_exchange_identificationとは何か

接続先が存在しない、またはセキュリティ違反によってリモートに接続できない場合に発生するエラーだそうです

ということは、

  • リモートのIPアドレスが何らかの原因で変更された

  • セキュリティの設定に何かしら変更があった(以前はログインできていたので)

ということが考えられる(?)気がします。

もっとも原因として考えられそうなものがIPアドレスなので、まずはそちらから確認していきます。

Webサーバーを確認

  • 今回はElasticIPを使用しているので、IPアドレスは固定されています。対象のWebサーバーのIPアドレスを確認すると、IPアドレスは変更されていないようでした。

  • webサーバーのセキュリティを緩めて直接ログインして確認します。

  • ssh -v -i <秘密鍵のパス> ec2-user@<接続先IPアドレス>でログインを試みると、

OpenSSH_8.1p1, LibreSSL 2.7.3
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 47: Applying options for *
debug1: Connecting to 54.248.28.113 [54.248.28.113] port 22.
debug1: connect to address 54.248.28.113 port 22: Operation timed out
ssh: connect to host 54.248.28.113 port 22: Operation timed out

タイムアウトしてます。。。

  • ここで念の為、インスタンスを停止→起動を行うとどうなるか確かめておきます

  • 踏み台サーバー経由でログインできました。。。(なぜ)

f:id:TechHotoke:20220205081630p:plain

2022/2/10 追記

  • 上記の現象が再度発生しまして、前回のインスタンスの再起動で解決できなかったため、追記しました。

現状

  • 発生している現象は前述のものと同様

  • 差異はインスタンスの再起動を行なっても解決しない点

確認

  • ssh -v -i <秘密鍵のパス> ec2-user@<接続先IPアドレス>SSH接続

  • どうやら今回はSSH接続出来ているようです。

OpenSSH_8.1p1, LibreSSL 2.7.3
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 47: Applying options for *
debug1: Connecting to 54.248.28.113 [54.248.28.113] port 22.
  • ここでポートフォワーディングを行うコマンドの文法を改めて確認しました。

  • ssh -L <ポート>:<ターゲットのIPアドレス>:22 -i <秘密鍵のパス> <ユーザー名>@<踏み台サーバーのIPアドレス>

    • -L:ローカルポートの転送。ローカルからリモート方向へのトンネリングを実現する。ローカルホストの任意のポート番号にアクセスした時に、ターゲットのIPアドレスにポート22番で接続する。
    • -i:キーファイルの指定。キーファイルのデフォルトは~/.ssh/id_rsa
  • 今まで実行していたコマンドを見ると、ターゲットのIPアドレスが誤っていました。なのでそれを修正します。

  • 無事つながりました。(逆に今までなんで接続出来ていたんでしょう。。。思い込みって怖い)

参考

EC2 インスタンスに SSH で接続しようとする時に発生する「接続が拒否されました」または「接続がタイムアウトしました」エラーを解決する

sshポートフォワーディングで詰まったら確認すること - Qiita

AWS EC2にSSHでアクセスする方法 - Qiita

https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-linux-resolve-ssh-connection-errors/