SSH ポートフォワーディング | Network
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を取得
例3:Macから踏み台サーバ経由でRDSに接続
ref. SSHトンネルの作り方。踏み台サーバーを経由して、接続が制限されたサーバーに接続する
前提
踏み台サーバ( 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.1 or localhost )のポート番号 50000 のデータが SSH で接続したサーバの
:3306に転送される
- ローカル( 127.0.0.1 or localhost )のポート番号 50000 のデータが SSH で接続したサーバの
mysqlコマンドはローカルのmysqlコマンドを使用するので SSH サーバにmysqlコマンドがなくても実行できる