Ref.

例1:簡単な例

nc コマンドでポートフォワーディングを試してみます。
接続先サーバ 203.0.113.100example ユーザーでログインできると仮定します。

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.100example ユーザーでログインできると仮定します
  • 接続先サーバ 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を取得

例3:Macから踏み台サーバ経由でRDSに接続

ref. SSHトンネルの作り方。踏み台サーバーを経由して、接続が制限されたサーバーに接続する

前提

踏み台サーバ( 203.0.113.100 )に ec2-user で SSH でログインできると仮定します。

手順

  1. ターミナルを分割
  2. SSH ポートフォワーディングで踏み台サーバ経由で RDS にコネクション確立
  3. 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 を指定するのが安全)
  • N SSH 先ではコマンドを実行しないオプション(これを付与しないと実際にサーバにログインしてしまう)
  • f 認証完了後、(SSH先でコマンドを実行する前に)バックグラウンドに移行するオプション(指定しなくても良い)

MySQLに接続

↑とは別ペインで以下を実行する。

$ mysql -h 127.0.0.1 -P 50000 -u  -p
  • ``、password は RDS に設定したもの
  • ホストは 127.0.0.1 にする
    • ローカル( 127.0.0.1 or localhost )のポート番号 50000 のデータが SSH で接続したサーバの :3306 に転送される
  • mysql コマンドはローカルのmysqlコマンドを使用するので SSH サーバに mysql コマンドがなくても実行できる