やったこと
図のようにAWS上のPublic subnet内に構築したEC2 bastionからPrivate subnet内に構築したEC2インスタンスに多段接続しようとした。
エラー内容
下記エラーが表示された。
$ ssh web01
channel 0: open failed: connect failed: Connection timed out
stdio forwarding failed
kex_exchange_identification: Connection closed by remote host
Connection closed by UNKNOWN port 65535
原因
EC2 bastionのセキュリティグループにデフォルトセキュリティグループを適用していなかった。
デフォルトセキュリティグループは全てのインバウンドトラフィックを許可する設定になっており、Private subnet内のEC2インスタンスには適用していたため、それでssh接続できるものと思っていた。
しかし、デフォルトセキュリティグループはこのセキュリティグループに割り当てられたすべてのリソースからのインバウンドトラフィックを許可します。
(デフォルトのセキュリティグループ)とのことで、通信を行いたいリソース同士に適用する必要があった。
解決法
EC2 bastionのセキュリティグループにデフォルトセキュリティグループを適用した。
Actions > Security > Change security groups から追加できる。
もし、デフォルトセキュリティグループを追加しない場合は、Private subnetのEC2インスタンスのセキュリティグループでEC2 bastionからのsshのインバウンドルールを追加することでも通信可能。