SSHの多段接続
とポートフォワーディング
の動作確認をします。
AWS上のpublicサブネットにEC2(踏み台サーバー)を作成して、
privateサブネットのEC2
とRDS
に接続してみます。
目次
動作確認環境
以下、AWSの構成で動作確認をします。
構成図
public subnet
に存在するEC2
を踏み台サーバー
として利用します。踏み台サーバーは必要なときだけ起動することで、よりセキュリティが高まります。
SSH多段接続の確認
Client → EC2(public) → EC2(private) でSSH接続
ポートフォワーディングの確認
- Client → EC2(public) → RDS で通信経路を確立
- 通信経路確立時に利用したローカルホスト上のポートにアクセスすることで、RDSに接続
EC2(public)
項目 | 説明 |
---|---|
パブリックIP | xxx.xxx.xxx.xxx とする |
プライベートIP | 10.0.1.186 |
SG | セキュリティグループA を割り当て22ポート のインバウンドを許可 |
EC2(private)
項目 | 説明 |
---|---|
プライベートIP | 10.0.3.236 |
SG | セキュリティグループB を割り当て22ポート のインバウンドを セキュリティグループA をつけたインスタンスからのみ許可 |
EC2(public, private共通)
項目 | 説明 |
---|---|
OSユーザー名 | AMIに Amazon Linux 2 を利用しているためユーザー名は ec2-user |
キーペア名 | wakuwaku-ssh-test |
RDS(private)
項目 | 説明 |
---|---|
SG | 3306ポート のインバウンドを セキュリティグループA をつけたインスタンスからのみ許可 |
エンドポイント | ssh-test-rds.xxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com とする |
DB User | ユーザー名: sampleuser パスワード: samplepass |
通常接続
[ Client → EC2(public) ]
SSHコマンドで接続
ssh -i [EC2(public)の鍵] [ユーザー名]@[EC2(public)のアドレス]
$ ssh -i ~/.ssh/wakuwaku-ssh-test.pem ec2-user@xxx.xxx.xxx.xxx
(省略)
[ec2-user@ip-10-0-1-186 ~]$
.ssh/conigを利用
以下設定を記述します。
Host ec2-pub
HostName xxx.xxx.xxx.xxx
User ec2-user
IdentityFile ~/.ssh/wakuwaku-ssh-test.pem
以下のようにアクセスできるようになりました。
$ ssh ec2-pub
(省略)
[ec2-user@ip-10-0-1-186 ~]$
多段接続
[ Client → EC2(public) → EC2(private) ]
SSHコマンドで接続
ssh -i [EC2(public)の鍵] \
-o ProxyCommand='ssh -i [EC2(private)の鍵] [ユーザー名]@[EC2(public)のアドレス] -W %h:%p' \
[ユーザー名]@[EC2(private)のアドレス]
$ ssh -i ~/.ssh/wakuwaku-ssh-test.pem \
> -o ProxyCommand='ssh -i ~/.ssh/wakuwaku-ssh-test.pem ec2-user@xxx.xxx.xxx.xxx -W %h:%p' \
> ec2-user@10.0.3.236
(省略)
[ec2-user@ip-10-0-3-236 ~]$
.ssh/conigを利用
以下設定を記述します。
Host ec2-pri
HostName 10.0.3.236
User ec2-user
IdentityFile ~/.ssh/wakuwaku-ssh-test.pem
ProxyCommand ssh ec2-pub -W %h:%p
以下のようにアクセスできるようになりました。
$ ssh ec2-pri
(省略)
[ec2-user@ip-10-0-3-236 ~]$
ポートフォワーディング
[ Client → EC2(public) → RDS ]
SSHコマンドで接続
書式
ssh -fNC \
-L [ローカルホストのポート]:[リモートホスト]:[リモートホストのポート] \
-i [EC2(public)の鍵] \
[ユーザー名]@[EC2(public)のアドレス]
オプション | 概要 |
---|---|
-f | バックグラウンドで実行 |
-N | 接続先サーバでシェルが起動させない |
-C | 圧縮(compression)を要求 |
-L | ポート転送の設定 |
mysql -u[DBユーザー名] -p[DBユーザーパスワード] -h 127.0.0.1 --port=[ローカルホストのポート]
実行例
$ ssh -fNC \
> -L 13306:ssh-test-rds.xxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com:3306 \
> -i ~/.ssh/wakuwaku-ssh-test.pem \
> ec2-user@xxx.xxx.xxx.xxx
$ mysql -usampleuser -psamplepass -h 127.0.0.1 --port=13306
(省略)
mysql>
補足|ネットワーク状況の確認
下記コマンドでネットワークの状態を確認できます。
nc -zv 127.0.0.1 13306
lsof -n -P -p [sshコマンドのプロセスID] | grep -e ESTABLISHED -e LISTEN