connect を使って簡単に多段 SSH を実現する方法

  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 のダウンロード先が変更になっていたので、修正しました。