SSH でトンネリング

投稿者: | 2011/09/16

SSH で VNC や RDP のトンネリングをしてやると,家や外出先から気軽に職場のネットワーク内のコンピュータへ接続することができます.

例えば,gate.example.com を経由して server.example.com:1234 と localhost:3456 との間にトンネルを掘りたい場合は,以下のようにしてポートフォワーディングしてやります.

$ ssh -L 3456:server.example.com:1234 username@gate.example.com

これで,localhost:3456 へのアクセスはすべて server.example.com:1234 へ転送されるようになります.

しかし,これではターミナルを閉じると同時にコネクションは切断されてしまいます.
そこで,ssh コマンドに -f -N オプションを追加することでバックグラウンドでコネクションを維持したままポート転送を実現することができます.

$ ssh -f -N -L 3456:server.example.com:1234 username@gate.example.com

コネクションを切断したいときは

$ ps aux | grep ssh
$ kill ****

の要領で該当プロセスを kill してください.

例えば,外部から接続可能な職場の SSH サーバ gate.example.com を経由して職場のコンピュータ debian.example.com のデスクトップを家から VNC で操作したいときは,家のコンピュータから

$ ssh -f -N -L 5901:debian.example.com:5901 username@gate.example.com

としてポート 5901 を転送してやります.
これで,家のコンピュータの VNC クライアントから localhost:5901 へ接続すれば debian.example.com のデスクトップを操作できるようになります.

RDP を転送したい場合は,

$ ssh -f -N -L 3389:windows.example.com:3389 username@gate.example.com

としてポート 3389 を転送します.