SSHローカルポートフォワードの覚え書き

2021年5月25日

SSH

たまに使うけれどすぐ忘れてしまう SSH ローカルポートフォワードについてメモ。

目次

  1. SSH ローカルポートフォワードとは
  2. SSH で接続するサーバのポートに転送したいとき
  3. SSH で接続するサーバとは別のホストのポートに転送したいとき
  4. 別の作業端末からも接続したい場合

SSH ローカルポートフォワードとは

SSH ローカルポートフォワードとは、SSH の接続を通して、ローカルホストの TCP ポートへの接続をリモートホストの TCP ポートに転送する機能です。ポートフォワーディング、トンネリングと呼ばれたりします。

SSH ローカルポートフォワーディングを利用すると、作業端末から直接接続ができないポートに、SSH により確立された接続を使ってアクセスすることができるようになります。例えば、内部のネットワークのみに公開している Web サイト、データベース、リモートデスクトップに外部から接続したいときなどに使えます。SSH だけ空いていればつながるので、一時的な裏口を作るイメージです。通信は SSH により暗号化されます。

クライアントからサーバに対してポートフォワーディングを設定する場合は以下のように SSH コマンドの -L オプションを使います。L はローカルポートフォワードの頭文字かと思います。

-L [bind_address:]port:host:hostport
SSHローカルポートフォワーディング

具体例を見ていきましょう。

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
SSHローカルポートフォワーディング

別の作業端末からも接続したい場合

作業端末だけでなく、別の端末からも接続したい場合は bind_address0.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
SSHローカルポートフォワーディング

参考資料

ssh(1) - OpenBSD manual pages

-技術ブログ
-