ssh を任意のポート、プロトコルの逆 proxy にする

以前「ssh を任意のポート、プロトコルの proxy にする」という記事で ssh の -L オプションを紹介しましたが、この逆バージョンについて触れていなかったので紹介しておきます。
 
ssh -L は先の記事で紹介したとおり SSHクライアントの任意のポートへの通信をSSHサーバのネットワークの任意のホスト、任意のポートに転送できるようにするためのオプションですが、ssh -L とは逆に ssh -R を使うとSSHサーバの任意のポートへの接続をSSHクライアントのネットワークの任意のホスト:ポートに転送できるようになります。
 
使い方:

ssh -R <SSHサーバ側でLISTENするポート番号>:<SSHクライアント側ネットワークの転送先ホストIPアドレス>:<転送先ホストポート番号> <SSHサーバホスト>

 
例: クライアントA(192.168.1.2)からSSHサーバB(10.0.0.1)に接続し、SSH サーバからクライアント側ネットワークのHTTPサーバC(192.168.1.3:80) に A 経由でアクセスする

 
A$ ssh -R 7777:192.168.1.3:80 10.0.0.1
–connected to B(10.0.0.1)–
B$ netstat -an | grep LISTEN | grep 7777
tcp4 0 0 127.0.0.1.7777 *.* LISTEN
B$ telnet localhost 7777
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
HEAD / HTTP/1.0\n
\n\n
HTTP/1.1 200 OK
Date: Fri, 14 Mar 2008 10:15:35 GMT
Server: Apache
Last-Modified: Thu, 20 Dec 2007 11:25:38 GMT
Accept-Ranges: bytes
Content-Length: 18050
Connection: close
Content-Type: text/html
 
Connection closed by foreign host.

 
なお、このオプションは -L 同様 PuTTY でも利用可能なので Windows から ssh 接続するときにも有用です。
 
参考:
ssh を任意のポート、プロトコルの proxy にする(過去記事)
ssh(1) manpage(openbsd.org)