Thursday, March 22, 2012

sshコマンドだけで多段ログインする

NAT内のホストなど、ゲートウェイを経由して多段sshログインする技についてです。

こんなのは既に使い古されている技で、ググると案の定一杯引っかかります。 が、どれもこれも、nc(1)やconnectなどというコマンドを経由させるものばかりで、ssh以外になにか入れなきゃいかんとか腑に落ちません。

というわけで、sshコマンドだけでやってみます。 opensshのman pageによると、

     -W host:port
             Requests that standard input and output on the client be for‐
             warded to host on port over the secure channel.  Implies -N, -T,
             ExitOnForwardFailure and ClearAllForwardings and works with Pro‐
             tocol version 2 only.

という記述があり、端的に言えば、nc(1)でやってることを-Wでもできるということになります。
では設定してみます。

[local] -- [gateway] -- [target]

みたいな環境で localからtargetにログインします。

local の ~/.ssh/config に以下を書き足します。

Host [target]
ProxyCommand ssh -q -W %h:%p [gateway]

はい。これでlocalからtargetにログインできますし、scpもできます。

(local) % slogin [target]

以上。

さて次に2段、[local]--[gateway1]--[gateway2]--[target] という環境を考えてみます。
結論から言うと単純にHostの定義増やしてしまえばできるようです。

localの~/.ssh/config に以下のように書いてみましょう。

Host [gateway2]
Hostname gateway2.in.example.com
ProxyCommand ssh -q -W %h:22 [gateway1]

Host [target]
ProxyCommand ssh -q -W %h:%p [gateway2]

これで、localからtargetへ(gw1, gw2を経由し)ログインできるようになりました。
以上。

No comments: