出版

SSHの使用が禁止され、HTTPプロキシの使用が強制されている環境の場合、そのHTTPプロキシをSSHのトランスポートとして使用することができます。Vincent DanenがCorkscrewプログラムを使ってこれを行う方法を解説しています。
出勤時に、必要なファイルを家に忘れてきたことに気づいたことはありませんか?あるいは、外出先で同じような状況に陥ったことはありませんか?環境やISPによっては、厳格なファイアウォールルールが設定されている場合があります。これらのルールは絶対に必要な場合もありますが、そうでない場合もあります。SSHの使用が禁止され、HTTPプロキシの使用が必須となっている環境の場合は、そのHTTPプロキシをSSHのトランスポートとして使用することができます。
環境のファイアウォールやアウトバウンドSSHアクセスを明示的に禁止するポリシーがある場合、私はファイアウォールを破ることを推奨しているわけではありません。残念ながら、現実の世界では、必要以上に、そして正当な理由もなく、多くの問題を引き起こすような厳格なファイアウォールルールが存在します。しかし、環境によってはアウトバウンドSSHを明示的に拒否することが必須であるため、ポリシーを尊重する必要があります。ルールを破ることは、ルールを提供するべき人々から許可や例外がない限り、決して推奨していません。
免責事項の説明はここまでにして、Corkscrewのホームページにアクセスし、Corkscrewのソースコードをダウンロードしてください。Corkscrewは、サーバー側の変更を必要とせずに動作するHTTPトンネリングプログラミングです。また、クロスプラットフォームなので、ほとんどのクライアントシステムで動作します。
Corkscrew をビルドするには、tarball を解凍して次のコマンドを実行するだけです。
./configure
作る
作成したcorkscrewアプリケーションをPATH環境変数内のどこか、または~/bin/以下にコピーします。次に、SSH設定ファイル~/.ssh/configを編集し、以下の行を追加します。
ホストsomehost
ホスト名 somehost.example.com
プロキシコマンド /home/user/bin/corkscrew proxy.example.com 8080 %h %p
ホスト名をSSH接続しようとしているホストに置き換え、「proxy.example.com」を実際のHTTPプロキシに置き換えてください。プロキシが別のポート(Squidの場合はポート3128)を使用している場合は、ポート番号(8080)も置き換える必要があるかもしれません。OpenSSHは%hを、接続先のホスト名(somehost.example.com)と接続先のポート番号(デフォルトでは22)に透過的に変換します。
ここでのProxyCommand行は、OpenSSHにCorkscrewプログラムを起動して、エンドSSHサーバーへの実際の接続を確立するよう指示しています。接続する必要があるすべてのホストに対して複数のエントリを作成することも、単純な正規表現を使用するか、Host行にグローバルアスタリスク(*)を使用することもできます(*はOpenSSHに、すべての接続でこのHostスタンザを使用するように指示します)。
完了すると、ssh somehost を実行すると、直接接続した場合と同じように接続が確立されるはずです。ただし、この方法はすべてのプロキシで動作するとは限らないため、多少の不確実性はありますが、Squid、Apacheのmod_proxyモジュール、その他いくつかの一般的な実装では動作するはずです。
このヒントの PDF 版をここから入手してください。

ヴィンセント・ダネン
Vincent Danenは、Red Hat Security Response Teamに所属し、カナダに住んでいます。10年以上にわたりLinuxに関する執筆と開発に携わっており、Macのベテランユーザーでもあります。