みなさんこんにちは、荒堀と申します。
今回は、複数台のEC2を経由してSSHを行う際に、使うと便利なProxyJump
を紹介します。
- 概要
- 参考
- 実行環境
- 構成
- 準備
- Webサーバーへ、踏み台サーバーを経由して接続
- 踏み台サーバーにローカルポートフォワードして、Webサーバーまでの経路を作成
- Webサーバーまでローカルポートフォワードして、Amazon Aurora MySQLまでの経路を作成
- おわりに
概要
ProxyJump
で記述すると、多段のSSHがシンプルなコマンドになる- コマンドで指定する場合は
-J
を使う - 途中のサーバーのキーペアファイルは、
~/.ssh/config
にファイルパスを指定する
- コマンドで指定する場合は
- 多段のローカルポートフォワードも可能
参考
man ssh_config
やman ssh
で詳細が確認できます。
実行環境
WindowsのWSLでやっています。
PS > wsl --list --verbose NAME STATE VERSION * Ubuntu Running 2
構成
構成は以下のようになります。
- 踏み台サーバー
- パブリックサブネットに配置
- 接続用PCからのSSHのみ可
- キーペアファイルあり
- Webサーバーとは異なる
- Webサーバー
- プロテクテッドサブネットに配置
- 踏み台サーバーからのSSHのみ可
- ALBからのHTTPも可だが、構成図からは省略
- キーペアファイルあり
- 踏み台サーバーとは異なる
- Amazon Aurora MySQL
- プライベートサブネットに配置
- WebサーバーからのMySQLのみ可
この構成でいろいろ接続して、最終的に接続用PCからAmazon Aurora MySQLにDB接続します
準備
キーペアファイルの準備
Windows・WSL特有の問題かと思います。
パーミッションの変更
WSLのSSHコマンドでキーペアファイルを使うために、ファイルのパーミッションを400に変更します。
ですが、/mnt/c/
以下にある、Windowsと共有しているファイルのパーミッションはWSLからは変更できません。
そのため、home下にkeys/{project名}
でディレクトリを作成し、そこにコピーした後にchmod 400
をします。
キーペアファイルの改行コード
Tera Termで使っている場合は改行コードがCRLFでも可能ですが、今回はLFにする必要があります。
Webサーバーへ、踏み台サーバーを経由して接続
-J
オプションを使ったやり方
~/.ssh/config
に、以下のように書きます。
Host hogehoge-bastion HostName {踏み台サーバーのIPorエンドポイント} User ec2-user IdentityFile {踏み台サーバーのキーペアファイルのパス} Host hogehoge-web HostName {WebサーバーのプライベートIP} User ec2-user IdentityFile {Webサーバーのキーペアファイルのパス}
その後、以下のコマンドを実行すると、WebサーバーにSSHでログインできます。
ssh -J hogehoge-bastion hogehoge-web
ProxyJump
を使ったやり方
経由するサーバーの指定は、~/.ssh/config
に、以下のようにProxyJump
を指定して書きます。
Host hogehoge-bastion HostName {踏み台サーバーのIPorエンドポイント} User ec2-user IdentityFile {踏み台サーバーのキーペアファイルのパス} Host hogehoge-web HostName {WebサーバーのプライベートIP} User ec2-user IdentityFile {Webサーバーのキーペアファイルのパス} ProxyJump hogehoge-bastion
コマンドがシンプルになります。
ssh hogehoge-web
踏み台サーバーにローカルポートフォワードして、Webサーバーまでの経路を作成
一旦ProxyJump
から離れますが、ローカルポートフォワードする場合を説明します。
ローカルの8989番ポートを踏み台サーバーまで延伸させて、Webサーバーの22番ポートへアクセスする場合は、以下のように設定します。
Host portfwd-bastion-web HostName {踏み台サーバーのIPorエンドポイント} User ec2-user IdentityFile {踏み台サーバーのキーペアファイルのパス} LocalForward 8989 {WebサーバーのプライベートIP}:22
以下のコマンドでローカルポートフォワードができます。
ssh portfwd-bastion-web
正しくローカルポートフォワードできているかは、Tera Termで確認できます。localhostの8989番ポートを指定して、WebサーバーにSSHログインできます。
Webサーバーまでローカルポートフォワードして、Amazon Aurora MySQLまでの経路を作成
ローカルの9898番ポートを、踏み台サーバーを経由してWebサーバーまで延伸させて、Amazon Aurora MySQLの3306番ポートにアクセスさせる場合は、以下のように設定します。
Host hogehoge-bastion HostName {踏み台サーバーのIPorエンドポイント} User ec2-user IdentityFile {踏み台サーバーのキーペアファイルのパス} Host hogehoge-bastion-db HostName {WebサーバーのプライベートIP} User ec2-user IdentityFile {Webサーバーのキーペアファイルのパス} ProxyJump hogehoge-bastion LocalForward 9898 {Amazon Aurora MySQLのエンドポイント}:3306
コマンドは以下になります。
ssh hogehoge-bastion-db
VSCodeに入れたMySQLの拡張機能で、接続できました。
おわりに
SSHコマンドでProxyJumpを使うことで、簡単にプライベートサブネット内のDBまでアクセスすることができました。 いつもTera Termで2回ローカルポートフォワードしてアクセスしていましたが、この方法で大変簡単になりました。
この記事がどなたかのお役に立てれば幸いです。