たまに使うけれどすぐ忘れてしまう SSH ローカルポートフォワードについてメモ。
目次
SSH ローカルポートフォワードとは
SSH ローカルポートフォワードとは、SSH の接続を通して、ローカルホストの TCP ポートへの接続をリモートホストの TCP ポートに転送する機能です。ポートフォワーディング、トンネリングと呼ばれたりします。
SSH ローカルポートフォワーディングを利用すると、作業端末から直接接続ができないポートに、SSH により確立された接続を使ってアクセスすることができるようになります。例えば、内部のネットワークのみに公開している Web サイト、データベース、リモートデスクトップに外部から接続したいときなどに使えます。SSH だけ空いていればつながるので、一時的な裏口を作るイメージです。通信は SSH により暗号化されます。
クライアントからサーバに対してポートフォワーディングを設定する場合は以下のように SSH コマンドの -L
オプションを使います。L はローカルポートフォワードの頭文字かと思います。
-L [bind_address:]port:host:hostport
具体例を見ていきましょう。
SSH で接続するサーバのポートに転送したいとき
例えば、SSH で接続するサーバ上で Apache の Web サーバが動いていて、作業端末の 8080 番ポートをサーバの 80 番ポートに転送したい場合は以下のコマンドを作業端末上で実行します。-N
オプションは接続のみでコマンドを実行しないオプションです。
ssh -i keypair_file -L 8080:localhost:80 ec2-user@192.0.1.1 -N
コマンドを実行して SSH の接続が確立された後、作業端末の Web ブラウザにて http://localhost:8080 にアクセスすると Web サイトを表示することができます。
SSH で接続するサーバとは別のホストのポートに転送したいとき
SSH 用の踏み台サーバ (192.0.2.1) があって、web サーバ (192.0.2.2) は別のサーバの場合は以下のコマンド。
ssh -i keypair_file -L 8080:192.0.2.2:80 ec2-user@192.0.2.1 -N
別の作業端末からも接続したい場合
作業端末だけでなく、別の端末からも接続したい場合は bind_address
に 0.0.0.0
を指定します。bind_address
のデフォルト値は 127.0.0.1
なので、未指定の場合は作業端末からしか接続ができません。
ssh -i keypair_file -L 0.0.0.0:8080:localhost:80 ec2-user@192.0.3.1 -N