OpenSSH のNetcat modeを使う


2011年 08月 02日

TIM Labsの言い出しっぺなのに、まるで記事を書いていなかったhimuka_kenです。
ネタはヘビーな話題から、夜のおかずまで…あるんですが、なかなか書く時間がありません。
(サボっていると言われたらその通りですが、何か?)

さて、メモをしとかないと忘れてしまいそうなのと、割りと社内でも知られていない?ので
記事として残しておきます。

OpenSSH の manを、ある日しげしげと眺めていると、

-W host:port
         Requests that standard input and output on the client be for-
         warded to host on port over the secure channel.

なんじゃこりゃ?と調べてみると、OpenSSH 5.4から実質netcat の機能を取り込んだ様です。

今までは、踏み台等の特定のホスト経由で多段でログインを行う場合には、

ssh -o ‘ProxyCommand ssh user@fumidai nc %h %p’ user@innerhost

としたり、一旦踏み台に対して、ssh -D 1080 fumidai で別にログインしsocks prxoyをたて、

ssh -o ‘ProxyCommand connect -S localhost:1080 -5 %h %p’ user@innerhost

とsocks経由でつないでしまうという手を使っていました。
(socksが使えるため、ブラウザでの確認、管理WEBへの接続、もろもろsocks経由で通信させる怪しいロシア製windows用ソフトとかw を使うために私はもっぱらこっちを使っています。踏み台にずらずらと、ncのプロセスが大量にいるという状況もなくなりますしね。)

前者は、踏み台にncがインストールされていないと使えませんし、後者は別に-Dでログインしておき、またconnectをインストールしておく必要があります。

ところが、この Netcat modeを使うと、

ssh -o ‘ProxyCommand ssh user@fumidai -W %h:%p’ user@innerhost

と、sshだけで済み、また手元のOpenSSHが5.4以上であれば、踏み台のsshのバージョンは問いません。
こりゃ便利というわけで、手元の5.4以上の環境では、~/.ssh/configへ

Host *.hogehoge.ugauga
        ProxyCommand ssh user@fumidai -W %h:%p

と書き換えて運用しています。

しかし、-Dというこの手のオプション(個人的には、このオプションが入ったときに、最初に頭に浮かんだのは….やばい。こりゃなんでもやり放題…という言葉でした。)を始め、なんだかアングラ感というかクラッキング臭が漂うオプションがどんどん入って来ますね。
某大手ネット企業では、プライベートネットワーク内でのオペレーションは、セキュリティの為にsshを逆に使用禁止にしているというのを聞いて、まあその気持ちはわからんでもないと思った次第です。

機会を見て、どう適切にsshを運用すれば良いのか、書きたいと思います。