多段SSH, ポートフォワーディングの方法

SSHの多段接続ポートフォワーディングの動作確認をします。AWS上のpublicサブネットEC2(踏み台サーバー)を作成して、privateサブネットEC2RDSに接続してみます。

動作確認環境

以下、AWSの構成で動作確認をします。

構成図

681-ssh-portforward-multistage_design.png

public subnetに存在するEC2踏み台サーバーとして利用します。踏み台サーバーは必要なときだけ起動することで、よりセキュリティが高まります。

SSH多段接続の確認

Client → EC2(public) → EC2(private) でSSH接続

ポートフォワーディングの確認

  1. Client → EC2(public) → RDS で通信経路を確立
  2. 通信経路確立時に利用したローカルホスト上のポートにアクセスすることで、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
【エンジニア向け】仕事を見つける方法

転職する

転職エージェントを活用する

転職サイトの場合、自身でサイト上から企業を探す必要があります。 一方「レバテックキャリア」 などの転職エージェントの場合、エージェントが企業を紹介してくれます。エージェントが間に入ることにより、日程調整や、条件交渉などもサポートしてくれます。

転職ドラフトを活用する

転職ドラフト」は、 企業がITエンジニアをドラフトという形で指名するサービスです。年収が最初に提示されるなどのメリットがあります。 ただ、初回登録時にレジュメ作成が必要で、すでにエンジニア経験が豊富にあるエンジニア向けのサービスかと思います。 レジュメ作成が手間ですが、自身のキャリアを見直す機会になり、他の仕事探しにも役立つはずです。

エンジニア転職保証のあるスクールを活用する

ある程度、開発経験のあるかたであれば、独学で必要なスキルを身につけることができるはずです。ただ、別業種からエンジニアに転職したい場合など、1から独学で学ぶのはハードルが高いです。そういった方は、スクールの活用を検討しても良いと思います。 「TechAcademy」は、エンジニア転職保証コースを提供しています。給付金制度の対象講座として認定されているため、金銭面の負担も抑えることができます。

フリーランスとして活動する

レバテックフリーランス」「ITプロパートナーズ」「ギークスジョブ」は、フリーランスエージェントサービスです。 エージェントによって、支払いサイトなど細かい違いはありますが、まずは良い案件を見つけることが重要です。 登録自体は無料なので、複数エージェントに登録して、より多くの案件を紹介してもらうのがおすすめです。

logo
わくわくBank.
技術系の記事を中心に、役に立つと思ったこと、整理したい情報などを掲載しています。