Corkscrewを使ってHTTP経由でSSHのトンネリング接続を行う

文:Vincent Danen(TechRepublic) 翻訳校正:村上雅章・野崎裕子
2009-10-12 08:00:00
  • このエントリーをはてなブックマークに追加

 本記事では、「Corkscrew」というクロスプラットフォームプログラムを利用し、HTTP経由でSSHのトンネリング接続を行う方法を紹介する。

 あなたには、出社してから必要なファイルを自宅に置き忘れてきたことに気付いたという経験はないだろうか?あるいは、出先でこういった忘れ物に気付いたことはないだろうか?企業やISPのなかには、こういった状況への対応を困難にする厳しいファイアウォール設定がなされているところもある。そして実際に、こういった厳しい設定が絶対に必要だというケースが存在している一方で、それほどではないというケースも存在している。とは言うものの、HTTPプロキシの使用が強制され、SSHが使えない環境であっても、HTTPプロキシを経由してSSHに接続することが可能なのである。

 先に述べておくが、本記事は外部へのSSHアクセスがポリシーで明示的に禁じられている環境において、ファイアウォールをかいくぐることを推奨しているわけではない!残念なことに現状では、必要性も真の理由もないにもかかわらず厳しいファイアウォール設定が行われている場合もある。とは言うものの環境によっては、外部へのSSHアクセスを明示的に禁じることが必要な場合もあり、そういった場合にはそのポリシーに従うべきである。あなたが担当者から許可を得ている、あるいは例外的に認められていない限り、筆者としては設定をかいくぐるような行為を行うべきではないと考えている。

 筆者の見解を理解してもらえたのであれば、Corkscrewのページにアクセスし、ソースコードをダウンロードしてほしい。Corkscrewはサーバ側での設定変更を必要としないHTTPトンネリングプログラムである。また、クラスプラットフォーム対応のプログラムでもあるため、ほとんどのクライアントシステム上で動作するはずである。

 Corkscrewをビルドするには、tarballを展開し、以下のコマンドを実行する。

./configure
make

 その後、ビルドされたCorkscrewアプリケーションをPATH環境変数内のいずれかのディレクトリにコピーする。そして、SSHコンフィギュレーションファイル(~/.ssh/config)をエディタで開き、以下の指定を追加する(この例は、Corkscrewアプリケーションを/home/user/bin/にコピーした場合のものである)。

Host 「ホスト」
Hostname 「実際のホスト名」
ProxyCommand /home/user/bin/corkscrew 「プロキシサーバ」 8080 %h %p

 「ホスト」の部分は、あなたがSSHで接続する際に指定するホスト名称で置き換え、「プロキシサーバ」の部分は実際のHTTPプロキシで置き換える。また、プロキシが代替ポート(例えばSquidの場合にはポート3128)で待ち受け(listen)を行っている場合には、ポート(上記の8080の部分)も置き換える必要がある。これでOpenSSHは、%hを接続対象のホスト名(上記の「実際のホスト名」)に変換し、接続ポートが指定されている場合はそれを用いて(デフォルトは22)接続を行うようになる。

 上記のProxyCommandの行ではOpenSSHに対して、Corkscrewプログラムを実行し、目的のSSHサーバへの実際の接続を行うよう指示している。接続を行う必要のあるホストが複数ある場合、それぞれにエントリを作成しておくことも可能であるが、Host行では簡単な正規表現やワイルドカード(*)を用いることもできる(*を用いることで、OpenSSHはすべての接続に際してこのHost指定を使用するようになる)。

 編集が完了したのであれば、「ssh ホスト」というコマンドを実行することで、まるで直接接続を行っているかのように接続できるようになっているはずである。なお、この方法はあらゆるプロキシに適用できるものではないという点に留意しておいてほしい。適用できないケースもあるとはいえ、SquidやApacheのmod_proxyモジュール、その他のよく利用されているいくつかの実装ではうまくいくはずである。

この記事は海外CBS Interactive発の記事を朝日インタラクティブが日本向けに編集したものです。原文へ

  • 新着記事
  • 特集
  • ブログ