SSH トンネル
SSH のトンネル
ローカルポート転送
ssh -L [クライアントのポート]:[転送したいホスト]:[転送したいホストのポート]
クライアント A、SSH サーバー B、転送ホスト C があり
C:8080
を A のポート 80 に転送したい場合。
ssh -L80:C:8080 B
この転送で、A から http://localhost
へアクセスすると、
B の http://C:8080
と同じ内容が表示される。
まとめると、 A から C は見えなくても、A から B へ SSH が接続でき、 B から C が見える場合、B を経由して C のポートを A へ転送可能。
-g
をつけると、A のホスト名で A のネットワークにあるパソコンから
C:8080 へアクセスができる。
家のネットワーク上にあるポートを外部に転送したいとき、 とりあえず 22 番だけ外部に開放している状態であれば、 ssh 経由で家のネットワークにアクセス可能。
リモートポート転送
ssh -R [クライアントのポート]:[転送したいホスト]:[転送したいホストのポート]
ローカル転送と異なり、 接続先から見えるポートを転送するのではなくクライアント側から見える ポートを転送する。
クライアント B、SSH サーバー A、転送ホスト C があり
C:8080
を A のポート 80 に転送したい場合。
ssh -R80:C:8080 A
この転送で、A から http://localhost
へアクセスすると、
B の http://C:8080
と同じ内容が表示される。
B が外からアクセスできない場合でも、
B と A の接続を確立させれば、
C の内容を A に転送可能。
B を直接操作できない場合に使うことが多く、
B と A の接続が切れるトラブルが発生した場合、A から C へのアクセスが不可能になるので、B と A の接続が切断された場合に自動的に再接続するツール
autossh
が使われることが多い。