[小ネタ]【Windows10ユーザー向け】ワンライナーで踏み台経由でプライベートのEC2にSSHアクセスする(Windows Subsystem for Linux版)

[小ネタ]【Windows10ユーザー向け】ワンライナーで踏み台経由でプライベートのEC2にSSHアクセスする(Windows Subsystem for Linux版)
2020.01.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。大阪オフィスの林です。

タイトルの通り、超小ネタです。踏み台経由でプライベートのEC2にSSHアクセスするユースケースって結構多くあると思います!自身でやり方確立していなかったので備忘がてらまとめておきたいと思います。

踏み台経由でプライベートEC2にアクセスする方法であれば、他にはTeraTerm等を使ったSSHポートフォワーディングの方法もありますが、今回は『Windows Subsystem for Linux版』と題して、Windows Subsystem for Linux(以下、WSLという。)の準備も含めてやり方をまとめておきたいと思います。

事前準備

WSLのインストール

[コントロールパネル] - [プログラムと機能] - [Windowsの機能の有効化または無効化]から[Windows Subsystem for Linux]を開きます。

Microsoft Storeから「Ubuntu」を検索します。

入手(Get)を選択します。
インストールが始まるとユーザー名とパスワードの設定を求められるので入力します。

ここは任意ですがデフォルトで海外のリポジトリを参照するようになっているので初回アップデート前にリポジトリを変えておきましょう。

sudo sed -i -e 's%http://.*.ubuntu.com%http://ftp.jaist.ac.jp/pub/Linux%g' /etc/apt/sources.list
sudo apt update
sudo apt upgrade

接続準備

キーペアのアクセス権変更

今回EC2の作成、キーペアの作成、セキュリティグループ等のAWS環境側の設定構築作業は実施済みという前提として進めさせて頂きます。 ダウンロードしたキーペアのアクセス権を前述で準備したUbuntuから実行します。 WSLでは、/mnt/のパス配下からWindowsの実際の環境のCドライブやDドライブのデータを参照することが出来ます。
しかし、/mnt/配下ではアクセス権の変更が出来ないので別途任意の場所にキーペアをコピー(移動でもOK)します。今回はkeyというフォルダを作成してそこにコピーしました。

mkdir key
#踏み台サーバ用のキーペアを「BastionKey.pem」としています。
#デスクトップに保存したキーペアをUbuntu内の「key」配下にコピーしています。
cp /mnt/c/Users/hayashi.masaya/Desktop/BastionKey.pem ./key/

#プライベートのEC2用のキーペアを「FromBastionKey.pem」としています。
#デスクトップに保存したキーペアをUbuntu内の「key」配下にコピーしています。
cp /mnt/c/Users/hayashi.masaya/Desktop/FromBastionKey.pem ./key/

以下はアクセス権変更前の状態です。

ll key/
#777でアクセス権が付いてる。
-rwxrwxrwx 1 hayashimasaya hayashimasaya 1692 Jan 22 21:18 BastionKey.pem*

#777でアクセス権が付いてる。
-rwxrwxrwx 1 hayashimasaya hayashimasaya 1688 Jan 22 21:18 FromBastionKey.pem*

変更します。

chmod 600 key/BastionKey.pem
chmod 600 key/FromBastionKey.pem

変更されたことを確認します。

ll key/
#600になった。
-rw------- 1 hayashimasaya hayashimasaya 1692 Jan 22 21:18 BastionKey.pem

#600になった。
-rw------- 1 hayashimasaya hayashimasaya 1688 Jan 22 21:18 FromBastionKey.pem

ここまでで準備完了です。

やってみた

さっそく接続してみます。コマンドは以下の感じです。

ssh -i key/プライベートEC2のキーペア -o ProxyCommand='ssh -i key/踏み台サーバのキーペア ec2-user@踏み台サーバのパブリックIPアドレス -W %h:%p' ec2-user@プライベートEC2のプライベートIPアドレス

実際の値を当て込むと以下の感じです。

ssh -i key/FromBastionKey.pem -o ProxyCommand='ssh -i key/BastionKey.pem ec2-user@18.179.xx.xx -W %h:%p' ec2-user@172.31.33.111

初回接続時はいつもの確認メッセージが出ますので「yes」で次に進みます。

The authenticity of host '18.179.xx.xx (18.179.xx.xx)' can't be established.
ECDSA key fingerprint is SHA256:+c1pwMwcThFIxTNO70hprInzEZ7fxRDuTxJgmnHqjZM.
Are you sure you want to continue connecting (yes/no)?yes

そのまま、プライベートのEC2にも接続するため、初回接続時は同様に確認メッセージが出ますので「yes」で次に進みます。

The authenticity of host '172.31.33.111 (<no hostip for proxy command>)' can't be established.
ECDSA key fingerprint is SHA256:h1c5flngklO2YTR8poR3kXjKJX2Fx/xCItbno600YuE.
Are you sure you want to continue connecting (yes/no)?yes

無事に接続まで出来ました。

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-172-31-33-111~]$

まとめ

やり方がいろいろあるので、自身のやり方を1つ抑えておくことをお勧めします!本来の開発に掛ける時間が削られてしまうのはもったいないですからね!

以上、大阪オフィスの林がお送りしました!