$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

ssh port forwardingsとtsocks

今日はsshのport forwarding周りとtsocksについて調べてみた。そのメモ。

ssh port forwards

 http://www.turbolinux.co.jp/products/server/11s/user_guide/x9016.htmlらへんが分かりやすかった。簡単に言うと「あるhost:portへのアクセスを、別のhost:portへ転送する」という感じでしょうか。
 sshで以下のような感じにすると転送できる。

# localhostの1080番をhost.mydomainの22(SSH)に飛ばせる
ssh -L 1080:host.mydomain:22 host.mydomain

 実際にlocalhostの1080番にsshでアクセスすると、host.mydomainのsshdにつながります。

ssh -p 1080 localhost

ssh dynamic port forwardings

 これはsshをsocks proxy serverとして動作させるみたいなやつです。ssh port forwardingsとの違いはhttp://old.typemiss.net/blog/kounoike/20061019-100辺りが参考になりました。設定とかはhttp://yk55.com/blog/2010/10/11/openssh_ssh_over_socks_prox/らへんが参考になりました。
 実際にdynamic port forwardingsをするには以下のコマンドでOK。

ssh -D 1080 -l shibayu36 host.mydomain

 これを経由してsshするには以下のコマンド。sshがsocks proxyに対応しているので、こんな感じに出来る。

ssh -l shibayu36 -o 'ProxyCommand nc -x localhost:1080 %h %p' host.mydomain

tsocks

 ssh dynamic port forwardingsを使うと、いろんな接続を踏み台越しにするというメリットが有るんですが、socks proxyに対応していないapplicationは使えないという問題点があります。そこでtsocksを使うと、いい感じにsocks proxy経由で通信してくれます。

 http://tomcat.tokcs.com/wiki/en/SSH%E3%81%A7SOCKS%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7らへんに書いてある設定を使って、

tsocks ping 8.8.8.8

とかすると、socks proxy経由でpingを打ってくれます。便利。

 実際にこれをどうやっているのかなと思ったらLD_PRELOADという環境変数でtsocksのプログラムを共有ライブラリとしてpreloadしてるんですね。