sshダイナミックフォワーディング@cygwin

OpenSSHクライアントのsshコマンドでトンネリングをする方法として-Lオプションを使って、ポートやフォワード先を指定する方法は知っていたが、-DオプションでSOCKSプロキシとして使えるとは知らなかった。-Lオプション(ssh -L 5555:192.168.1.1:6666 ホスト名)では、使うトンネルの数だけオプション書くのは面倒だなぁって思ってたから、まじで便利です。接続方法は簡単です。

$ ssh -D 1234 接続先IP

これで、localhostの1234ポートがSOCKSになります。

puttyやIEなどSOCKSに対応しているアプリケーションならば、すぐに使えます。

sshコマンドでSOCKSはそのままでは使えません。connect.cというファイルがネット上にありますので、使わせて頂きます。

今回はcygwin上でsshを使うので、上記リンク先にあるWindowsのバイナリ(connect.exe)をダウンロードし、/usr/local/bin に保存しておきます。

使用方法は、~/.ssh/config に以下のように設定します。ここでは192.168.1.1 や HOST1といったサーバに接続する場合にSOCKS(port 1234)が使われます。

Host 192.168.1.* 192.168.2.* HOST1
  ProxyCommand /usr/local/bin/connect.exe -S localhost:1234 %h %p

なお、HOST1が接続先のサーバでDNSや/etc/hostsで名前解決できないと、エラーになります。ローカルで名前解決後にSOCKSに接続するには、-R localを使えば可能です。

Host 192.168.1.*
  ProxyCommand /usr/local/bin/connect.exe -R local -S localhost:2222 %h %p

GPLライセンスなので、ここに置いておきます。

connect.c
connect.exe (Windows版バイナリ)

タイトルとURLをコピーしました