Ari's Blog

Reading makes me rich !

向こう側からの ssh トンネル

leave a comment »

「こんなオプション使うシーンあるだろうか?」と思っていたし、実際に今まで利用シーンがなかったのだが、このほどそのシーンに巡りあうことになった。

最初に言っておくが、こんなことしなくてもいいのが本来の形。あくまでもイレギュラーでテンポラリーな利用にすべき内容である。

「なにはなくとも ssh」というほど最強プロトコル(と私は思っている)な ssh。その利用方法で最も神だと思えるのはポートフォワードだ。

  • 自分が HostA
  • リモートサイトの HostB へは ssh だけ可能
  • リモートサイトの HostC の PostgreSQL にアクセスしたい。HostB → HostC の psql は可能

というのが一般的な利用シーンで、HostA の 15432 ポートにアクセスしたら、HostC の 5432 ポートにアクセスできるようにするなら、HostA からこんなトンネルを掘るよね。

HostA% ssh -L 15432:HostC:5432 HostB

だが、そもそも HostA から HostB への ssh 通信が制限されていた場合は、こんなことはできない。そして今回私はそういうシーンにあたった。しかし、運良く?HostB 側から HostA 側へは ssh ができることが判明したのだった。そこで今まで使ったことのない、相手側から ssh のトンネルを掘るということを試してみた。相手側からトンネルを掘るので、HostB から ssh するのだ。

HostB% ssh -R 15432:HostC:5432 HostA

なんだかすんごい気持ち悪いんだが、こんなことをすると、HostA 側で 127.0.0.1:15432 のポートがたしかにオープンしているんだよ。HostB から ssh したのに。で、HostA で

HostA% psql -U postgres -l -h 127.0.0.1 -p 15432

とかすると、HostC のデータベースリストが出力されるんだよ、気持ち悪いことに。

そんなこんなで実際に使う時には ssh オプションにさらに -N -f といったものを追加してトンネルを掘る。だが、予想したとおり、一定時間経過するとこのトンネルはなくなっている。当たり前と言えばあたりまえだが、インテリジェンスなネットワーク機器の余計なおせっかいによって切られるんだよ。何も通信してなから。必要なときだけトンネルを掘りたいんだが、必要なのは HostA 側なのだが、トンネルを HostB 側からしか掘れない。となると一日の内わずかな時間しか使わないのに、HostB 側から HostA 側へトンネルを掘っておき、それを維持しておかなければならない。

そうそう、そこで必要になるのがこのパッチだ。(東北大学の人が作ったのかな?)Heartbeat/Watchdog Patch for OpenSSH というパッチだ。無害なパケットを定期的に送るオプションを追加するパッチで、これをあてた OpenSSH は、Heartbeat というオプションが利用できるようになる。2006 年からメンテされていないので、使うシーンは本当に限定的にした方がいい。対象の OpenSSH は 4.4p1 なので、OpenSSH のミラーサイトから 4.4P1 をダウンロードしてきて、本パッチを適用してインストールすればいい。

2006 年当時の OpenSSH を利用するわけだから「限定的利用」とすべきだろう、いや、しなければならない。そもそもこんなパッチは、「つなぎっぱなしにする」ことが目的なのだから、セキュリティ的に考えれば完全に NG でしょ。しかも前述のような理由とあっては、もはやこんな風にして掘られた ssh トンネルは「イスラエルにとってのハマスのテロ攻撃用トンネル」と同じでしょ…。やってはいけないのだが、超急ぎでテンポラリの予定だし、このトンネルを通さないで流していることの方がマズイ!ということで仕方なく…(理由があればやっていいのか!?)

% ./configure –prefix=$HOME
% make
% make install

したら、自分だけ使えるようになる。そして Heartbeat オプションを ssh の config に記載すれば良い。だが、デフォルトの ~/.ssh/config に書いてしまうと、何気に ssh コマンドを使った時に、OS 付属の ssh に「そんなオプション知らない」と怒られてしまうので config ファイルも別にしておき、

HostB% ~/bin/ssh -N -f -F ~/.ssh/config_keepalive -R 15432:HostC:5432 HostA

@@このオプションの多さ…。このコマンドライン見ただけで怪しいことをしている…という匂いが漂っている。

広告

Written by arito

2014-08-31 @ 01:19

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。