防火壁によりネットワークが分断されているところで中継により通信できるように するためのプロトコルとして SOCKS が ありますが、ここでは、 ssh を SOCKS 対応にする方法を説明します。
ここで説明する方法は、 移植版 OpenSSH を対象としています。 また、 SOCKS の実装として、 Dante を用います。
以下に示す方法は、 OpenSSH 3.5 以降で SSH1 プロトコルの
Rhosts with RSA ホスト認証を使わない場合は、意味がなくなっています。
ssh コマンドを setuid しておかなくても良いからです。
普通のコマンドと同じように socksify ssh として実行してください。
ただし、 Hostbased 認証と ssh-keysign を有効にしていると、
次のようなエラーが出ます。
/usr/libexec/openssh/ssh-keysign: error while loading shared libraries: libdl.so: cannot open shared object file: No such file or directoryssh_keysign: no replykey_sign failed
これを避けるためには、オプションで Hostbased 認証を無効にしてください
(-o HostbasedAuthentication=no)。
シェルスクリプトにしておくと便利です。
なお、 SOCKS を使うと Hostbased 認証を使うことは原理的にできません。
以下は資料のために残しておきます。 RPM パッケージの配布は中止しています。
RPM パッケージを用意しています。
バイナリインストールと、 ソースパッケージから構築する方法とがあります。 バイナリは、 Vine Linux 2.1 (i386) 用です。
いずれの場合も、 Dante を RPM でインストールする必要があります。 Dante のバイナリパッケージも用意しています。 Dante の配布に spec ファイルが含まれているので、それで構築することもできます。
RPM 置き場から、 RPM パッケージをダウンロードします。 Dante は、 dante のみインストールすれば良いです。 OpenSSH は、 openssh が SOCKS 化されていないもの、 openssh+dante が SOCKS 化されているものです。普通は、クライアントのみ SOCKS 化すれば充分なので、 openssh, openssh+dante-clients, openssh-server の組合わせでインストールします。 openssh+dante-clients は以前のバージョンの openssh-clients から アップグレードできます。 openssh-askpass と openssh-askpass-gnome はお好みでどうぞ。
ソース RPM 置き場から、 ソース RPM パッケージをダウンロードします。 OpenSSH のソースを持っている場合は、代りに パッチと spec ファイルのみダウンロードしても良いです。
openssh を構築する前に、 dante と dante-devel をインストールしておく 必要があります。
openssh の RPM を構築するときに、 rpm コマンドの引数に
--define 'with_dante 1' をつけると openssh+dante パッケージが、
つけないと openssh パッケージができます。
このようにして2種類のパッケージを作り、
サブパッケージ毎に SOCKS 化したものとしないものとを選んでインストールします。
バイナリインストールの項も参照してください。
一般的な RPM の構築の仕方については、
Vine Linux のマニュアルや
Making RPM
等を参照してください。
patch -p1 < パッチファイル
configure スクリプトを更新します。
GNU autoconf が必要です。
autoheader, autoconf とコマンドを2つ実行します。
configure を --with-dante オプションをつけて
実行します。
make, make install します。
この方法だと、サーバもクライアントも全て SOCKS 化されてしまいます。
サーバを SOCKS かするのは無意味なのでそれは避けたいという場合は、
先に --with-dante オプションをつけないでコンパイル・インストール
した後、 --with-dante オプションをつけて make して、
make install せずに ssh だけ手動でインストールするのが
良いでしょう。
RPM を利用する場合は不要
このパッチは、次の方法で SOCKS 化しています。 これは、 OpenSSH に限らず一般的に使える方法です。
connect などのソケット関連の関数の呼び出しを
SOCKS ライブラリの関数の呼び出しに置き換える。CPP のマクロは、 Dante に含まれるヘッダファイル socks.h で定義されています。 このヘッダファイルをできるだけ早い段階で include することにより SOCKS 化が行えます。 OpenSSH の場合、 defines.h の先頭で include すれば 良いです。
このパッチを作った背景として、次のようなことがあります。