connect を使って簡単に多段 SSH を実現する方法
2006-09-04-2: [Security]
OpenSSH 限定の話になるのかもしれませんが,localhost から remotehost1 を経由して remotehost2 に接続するような
多段 SSH を実現するには,ポートフォワードを使う方法がありました.
この話は以前ここでも,話題に上げたことがありました ([2005-01-24-2]).
もちろんこの方法でも実現できますが,OpenSSH の ProxyCommand を利用することで簡単に多段 SSH が実現できます.
1. ソース (http://www.meadowy.org/~gotoh/ssh/connect.c) を取得します.
2. ソースのコメントを参考に connect.c をコンパイルします.うちの環境は Solaris なので,以下のようにしました.
$ gcc -O2 -o connect -lresolv -lsocket -lnsl connect.c
3. connect コマンドをパスの通ったところにコピーします.
もしくは後でフルパスで指定するのであれば,適当な所にコピーしておきます.
4. $HOME/.ssh/config に ProxyCommand の設定をします.
Host remotehost2
# ここの username は remotehost2 のユーザ名
User username
# /usr/local/bin/connect は remotehost1 の connect の場所を指す
ProxyCommand ssh remotehost1 /usr/local/bin/connect %h %p
これで,ssh remotehost2 をすれば,remotehost1 を経由して remotehost2 に接続することができます.
connect は 多段 SSH 以外にも,SOCKS や HTTP プロキシも利用することができますので,
社内や学内などから外部の SSH サーバに接続する場合に,とても便利だと思います.
- SSH Proxy Command -- connect.c
http://zippo.taiyo.co.jp/~gotoh/ssh/connect.html
- ref.: 外部の SSH サーバに接続する方法
http://www.st.ryukoku.ac.jp/services/proxy-ssh.html
- ref.:
[2005-01-24-2] SSH でポートフォワード
[2004-12-19-1] SSH で多段接続?
[2004-04-21-13] ファイアウォールを超えて SSH する SSH Proxy Command
- 追記 (2008-04-09)
connect.c のダウンロード先が変更になっていたので、修正しました。