notebook

都内でWEB系エンジニアやってます。

多段sshが必要な環境でローカルからRDSへ接続する

社内のしがらみ?とかでRDSへ接続するのに2つ踏み台を経由しないといけなくなってしまったので困っていたのですがぽろっと愚痴ったら先輩方に出来るじゃねーか!と教えていただいたのでメモ

踏み台一つであればソフトによっては対応していて踏み台の設定を入力すれば接続できたので最近までそういう方法でやっていたのですが、踏み台を2台経由しないといけない案件が発生してしまったためこういう事態になりました

最初cliだけで頑張ってたんですがなんだかんだいってcliだけでSQL叩いてくのはちょっとつらみがあるのでGUI使ってらくしたいですね

ということで、ポートフォワードを使って実現します

状況はこんな感じ

ローカルPC ⇒ 踏み台サーバA ⇒ 踏み台サーバB ⇒ RDS

自分のPCはWindowsですが Git Bashなどが入っていればそちらのコンソールからsshコマンドが実行できるのでそれで行いました

sshログイン時に-Lオプションを付与でポート転送機能を利用することが出来る

  • -L ローカルのポート番号:リモートアドレス:リモートのポート番号

ローカルのポート番号へ通信するとリモートのポートへ転送してくれる

例えば踏み台AサーバAの44444ポートへの通信でRDSへ接続するためのトンネルを開けるには下記のようなコマンドを叩きます

ssh -L 44444:RDSのエンドポイント:3306 username@踏み台A
mysql -h localhost -P 44444

多段の場合はssh先でもう一度sshでポートフォワードしないといけないのですが-tオプションでコマンド一回で実行できるようになります

  • -t リモートマシン上でコマンドを実行

-t オプションでリモートマシン上でコマンドを実行することが出来るので一個目の踏み台でコマンドを実行するのと同じことを1行で書くことが出来ます

下記のコマンドでローカルマシンの13306番ポートに接続することでRDSに接続できるようになります

ssh -t -L 13306:localhost:44444 username@踏み台A ssh -L 44444:RDSのエンドポイント:3306 username@踏み台B
  • おまけ

好みで下記のオプションもつけたり出来る

  • -f バックグラウンド実行
  • -N ssh先でコマンド実行しない

参考

SSHポートフォワーディング(トンネリング)とは: 小粋空間

www.koikikukan.com

楽しいトンネルの掘り方(オプション: -L, -R, -f, -N -g) — 京大マイコンクラブ (KMC)

www.kmc.gr.jp