【AWS】踏み台サーバーを使って、プライベートサブネットにあるインスタンスへSSH接続をする

今回はAWSの踏み台サーバーを使って、プライベートサブネットへSSH接続をする方法の紹介です。
この記事は前提として以下の知識、手順などを理解している方向けになります。
- VPCの知見
- EC2の知見

それでは早速始めましょう
踏み台のパブリックサブネットのインスタンスにSSH接続する方法
EC2からパブリックインスタンスにチェックを入れます。
チェック後、接続を押下します。

sshクライアントタブの例に記載があるSSHから始まるコマンドになります。
カレントディレクトリを.sshへ

SSHクライアンドタブに記載の手順に沿って接続していきます。

現在のディレクトリを「.ssh」に移動します。
cd ~/. ssh
pemファイルの権限を変更する
pemファイルの権限を変更する
chmod 400 "ec2-vpc-only-key.pem"
パブリックサブネットのインスタンスにSSH接続する
パブリックサブネットのインスタンスにSSH接続する
ssh -i pemファイル名 ユーザー名@グローバルIP

パブリックサブネットのインスタンスにSSH接続します。
ssh -i "ec2-vpc-only-key.pem" ec2-user@54.238.2.177

「ec2-user」がユーザー部分になりますので、間違えないように注意してください。

以下のようにユーザーがSSH先に変更されていれば接続成功です。

全体のコードも見れて分かりやすいです。
kami@kami ~ % cd ~/.ssh
kami@kami .ssh % chmod 400 "ec2-vpc-only-key.pem"
kami@kami .ssh % ssh -i "ec2-vpc-only-key.pem" ec2-user@54.238.2.177
A newer release of "Amazon Linux" is available.
Version 2023.3.20240304:
Run "/usr/bin/dnf check-release-update" for full release and version update info
, #_
~\_ ####_ Amazon Linux 2023
~~ \_#####\
~~ \###|
~~ \#/ ___ https://aws.amazon.com/linux/amazon-linux-2023
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
Last login: Wed Mar 6 15:17:55 2024 from 133.32.181.19
[ec2-user@ip-10-0-30-203 ~]$
秘密鍵をSSHの接続先へコピーする
SSHに接続ができたら、秘密鍵をSSHの接続先へコピーを行います。
(SSH接続前に行っても問題ありません)

scpコマンドを使ってSSHの接続先へ秘密鍵をコピーします。
※秘密鍵がパブリックとプライベートが一緒になってる場合に限ります。
scpのコマンド実行文
scp [オプション] [ソース] [宛先]
scpのコマンド実行例
scp -i 秘密鍵 送信するファイル名 ユーザー名@接続先のプライベートサーバー:送信するディレクトリ
接続する前に分かりやすく説明のために、パブリックサブネットのインスタンスの接続先の中身を見てみましょう。
秘密鍵が存在しないことを確認できたので、scpコマンドでコピーします。
[ec2-user@ip-10-0-30-203 ~]$ ls -la
total 16
drwx------. 3 ec2-user ec2-user 95 Mar 3 03:59 .
drwxr-xr-x. 3 root root 22 Mar 2 06:57 ..
-rw-------. 1 ec2-user ec2-user 315 Mar 3 07:43 .bash_history
-rw-r--r--. 1 ec2-user ec2-user 18 Jan 28 2023 .bash_logout
-rw-r--r--. 1 ec2-user ec2-user 141 Jan 28 2023 .bash_profile
-rw-r--r--. 1 ec2-user ec2-user 492 Jan 28 2023 .bashrc
drwx------. 2 ec2-user ec2-user 48 Mar 3 02:05 .ssh
[ec2-user@ip-10-0-30-203 ~]$ client_loop: send disconnect: Broken pipe
scpのコマンド具体例

今回の例ではこちらのコマンドを叩けば、秘密鍵をSSHの接続先へコピーできます。
scp -i ec2-vpc-only-key.pem ec2-vpc-only-key.pem ec2-user@プライベートEC2のIP:/home/ec2-user

scpコマンドを正しく、実行できればpemファイルが最後尾に追加されているのがわかります。
[ec2-user@ip-10-0-30-203 ~]$ ls -la
total 20
drwx------. 3 ec2-user ec2-user 123 Mar 6 15:17 .
drwxr-xr-x. 3 root root 22 Mar 2 06:57 ..
-rw-------. 1 ec2-user ec2-user 315 Mar 3 07:43 .bash_history
-rw-r--r--. 1 ec2-user ec2-user 18 Jan 28 2023 .bash_logout
-rw-r--r--. 1 ec2-user ec2-user 141 Jan 28 2023 .bash_profile
-rw-r--r--. 1 ec2-user ec2-user 492 Jan 28 2023 .bashrc
drwx------. 2 ec2-user ec2-user 48 Mar 3 02:05 .ssh
-rw-------. 1 ec2-user ec2-user 1674 Mar 6 15:17 ec2-vpc-only-key.pem
スポンサードサーチ
プライベートサブネットのインスタンスにSSH接続する方法
プライベートサブネットのインスタンスの接続先の確認
パブリックサブネットのインスタンス同様に、EC2からプライベートサブネットのインスタンスをチェックして、接続を押下します。


ここからはパブリックとは異なるのでよく読んでください。
ここで違うのは、カレントディレクトリの変更は行いません。
踏み台なのでパブリックからプライベートへ接続を行います。
なので、ファイルの権限の変更と接続先のコピーをしておきます。

踏み出意を経由してプライベートサブネットのサーバーへ接続
ssh -i pemファイル名 ユーザー名@プライベートIP
以下のようにec2-userと表示があるように、パブリックインスタンスにSSH接続ずみの状態でSSH行います。
[ec2-user@ip-10-0-30-203 ~]$ ssh -i ec2-vpc-only-key.pem ec2-user@10.0.39.142
, #_
~\_ ####_ Amazon Linux 2023
~~ \_#####\
~~ \###|
~~ \#/ ___ https://aws.amazon.com/linux/amazon-linux-2023
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'

接続できましたね。
以上で、踏み台サーバーを経由して、プライベートサブネットのサーバーへSSH接続する方法でした。