こんにちは!
エデュケーショナルサービス課研修中の阿部です。
今回は、ポートフォワーディングを利用して、踏み台サーバー経由でプライベートサブネット内のEC2へ接続する方法について、記載します。
はじめに
AWSが定義しているEC2へのSSH接続時ベストプラクティスとしては、以下の2通りの方法があります。 本記事で紹介する方法は、この2通りとは別の方法であり、ベストプラクティスではないという点、ご承知おきください。
- AWS System Manager Session Manager を利用する
- EC2 Instance Connectを利用する
上記それぞれの手順については、当ブログ内で別途掲載しておりますので、そちらをご確認ください。
また、ポートフォワーディングには3種類あるのですが、本記事では説明しませんのでご留意ください。
ユースケース
- 諸事情により、上記ベストプラクティスを実施できない場合 *踏み台サーバーに秘密鍵を配置せずに、プライベートサブネット内のEC2へSSH接続したい場合
- ちょっとした個人検証などで、手早くかつ安全に、EC2へアクセスしたい場合
対象読者
本記事はAWS・Linux初学者向けの記事となっております。
構成図
本記事では、以下の構成で説明いたします。 クライアントPCはMacOSです。
前提条件
- キーペアは取得済みであること。
- OSはすべてLinux。
- 踏み台サーバー→WEBサーバーへのSSH接続を許可していること。
- 踏み台サーバーにパブリックIPが付与されていること。
手順
大まかな流れは以下の通りです。
1.クライアントPCへ踏み台サーバーとWEBサーバーのキーペアを配置する
2.クライアントPCから、SSHコマンドを実行する
1.クライアントPCへ踏み台サーバーとWEBサーバーのキーペアを配置する
接続元となるクライアントPC内の任意のディレクトリに、キーペアを配置します。
2.クライアントPCから、SSHコマンドを実行する
ここが本記事のミソです。
クライアントPCから以下コマンドを実行することで、対象EC2へSSH接続することができます。
ssh -o ProxyCommand='ssh -i [踏み台キーペア名] -W %h:%p ec2-user@[踏み台パブリックIP]' -i [接続先EC2キーペア名] ec2-user@[接続先EC2サーバープライベートIP] -p 22
コマンド解説
ssh
SSHコマンドを使ってリモートサーバーに接続するための基本コマンドです。
-o ProxyCommand=
-oはオプションを指定し、今回ではProxyCommandというSSHオプションを利用しています。
ssh -i [踏み台キーペア名]
踏み台サーバーに接続するために使用するキーペアを指定します。
-W %h:%p
-Wオプションで、データを指定されたホストのポートに転送し、%hは接続先ホスト(今回の場合はプライベートIP)を表し、%pで接続先ポート(今回の場合は22番ポート) を指定しています。
ec2-user@[踏み台パブリックIP]
ここで踏み台サーバーへ接続するためのユーザーと、踏み台サーバーのパブリックIPアドレスを指定します。
-i [接続先EC2キーペア名]
次は最終的に接続したいEC2で使用するキーペアを指定します。
ec2-user@[接続先EC2サーバープライベートIP]
接続先のEC2のユーザー名とそのプライベートIPアドレスを指定します。
-p 22
最後に接続先EC2のSSHポート番号(通常は22番)を指定します。
実際にコマンドを実行すると以下のようになります。
成功すれば、接続先ホストが信頼できるかどうか聞かれるので、「yes」と入力します。
これにより、1行のコマンドでプライベートサブネット内のEC2へ、踏み台サーバー経由でアクセスすることができました。
おまけ
今回と似たような手順として、「ProxyJump」を利用したSSH接続方法もあるようです。 ご参考までに。
最後に
いかがだったでしょうか?今回の内容は、普段から業務でAWSまたはLinuxを利用しているエンジニアであれば当たり前の技術かもしれません。 ですが、駆け出しエンジニアやAWS初学者の方だと、躓いてしまう可能性があると思います。かく言う私もその一人でした。
本記事がそんな方々のお役に少しでも立てれば幸いです。
阿部伊織(執筆記事の一覧)
インフラエンジニアからクラウドエンジニアへ転職。