SSH ポートフォワーディング
SSH ポートフォワーディングについて整理しています。
Ref.
例 1:簡単な例
nc コマンドでポートフォワーディングを試してみます。
接続先サーバ 203.0.113.100 に example ユーザーでログインできると仮定します。
203.0.113.100 サーバで、nc コマンドを発行してポート 9000 でサーバを稼働します。
# サーバ(203.0.113.100)
nc -l 9000
ローカルで SSH ポートフォワーディングを設定します。
今回は例としてポート 50000 を使用します。
# ローカル(Mac)
$ ssh -N -L 50000:127.0.0.1:9000 \
-i "~/path/to/key" example@203.0.113.100
フォアグラウンドで稼働します。
ローカルの別ターミナルでコマンドを実行します。
# ローカル(Mac)
nc 127.0.0.1 50000
Hello World
203.0.113.100 のポート 9000 で稼働しているサーバに Hello World と表示されます。
# ローカル(Mac)
$ nc -l 9000
Hello World
例 2:cURL
- 接続先サーバ
203.0.113.100にexampleユーザーでログインできると仮定します - 接続先サーバ
203.0.113.100のポート80で Web サーバが稼働していると仮定します
# ローカル(Mac)
ssh -N -L 50000:localhost:80 \
-i ~/path/to/key example@203.0.113.100
ローカルで HTML を取得します。
# ローカル(Mac)
$ curl 127.0.0.1:50000
# (80番でサーバが稼働していれば)HTMLを取得
前提
踏み台サーバ( 203.0.113.100 )に ec2-user で SSH でログインできると仮定します。
手順
- ターミナルを分割
- SSH ポートフォワーディングで踏み台サーバ経由で RDS にコネクション確立
- MySQL にコマンド発行
SSH ポートフォワーディングで RDS にコネクション確立
SSH ポートフォワーディングで踏み台サーバ 203.0.113.100 から RDS に SSH 接続します。
ssh -N -L 50000::3306 \
-i ~/path/to/key ec2-user@203.0.113.100
# バックグラウンドで実行していないので接続状態のままになる
# 切断はCtrl + C
50000はローカルポート。(例では 50000 だが任意の番号で良いが動的番号 49152〜65535 を指定するのが安全)NSSH 先ではコマンドを実行しないオプション(これを付与しないと実際にサーバにログインしてしまう)f認証完了後、(SSH先でコマンドを実行する前に)バックグラウンドに移行するオプション(指定しなくても良い)
MySQLに接続
↑とは別ペインで以下を実行します。
mysql -h 127.0.0.1 -P 50000 -u -p
- ``、
passwordは RDS に設定したものです - ホストは
127.0.0.1にします- ローカル(
127.0.0.1orlocalhost)のポート番号 50000 のデータが SSH で接続したサーバの:3306に転送されます
- ローカル(
mysqlコマンドはローカルのmysqlコマンドを使用するので SSH サーバにmysqlコマンドがなくても実行できます