XShell
Windows用 の SSHクライアント です。現状ではこれが Windows ではベストだと思っています。個人利用ならばフリーです。
SSHトンネルを構築する
XShell を用いて SSHトンネルを構築する方法を示します。なお、事前の準備としていわゆる踏み台サーバの設定が必要になります。その設定が済んでいるものとして、以下、説明をします。
1. メニューから「ファイル」→「新規」とたどって新しいセッションを作りはじめる
2. 設定メニューを「接続」→「SSH」→「トンネリング」とたどって設定画面を表示させる
3. 「追加」ボタンを押します
4. 設定項目を埋めていく
設定項目の内容は以下のとおりです。
種類(方向)
Local (Outgoing)
を選びます。これを選ぶと「Windowsマシンから『対象LAN内のマシン』にアクセスできる」ことになります。ソースホスト と リッスンポート
- 「ソースホスト」および「リッスンポート」は、Windowsマシンでアクセス先として指定するホストとポートです
- Webブラウザを用いたアクセスの場合は、URL欄に入力するホストとポート番号になります
対象ホスト
- 「対象ホスト」とは「踏み台ホスト」のアドレスのことです
- アドレスは「踏み台ホストを基準とした」アドレスです*1
localhost
の場合がほとんどでしょう。
宛先ポート
- 「踏み台ホスト」におけるどのポートが『対象LAN内のマシン』とつながっているかを指定します。
具体例
上記の設定の具体例を示します*2
- A を『対象LAN内のマシン』とします
- 外に出てはいけるが外からは入ってこられません
- このマシンのWebサーバに接続することを目的とします
- X を踏み台マシンとします
- インターネット上の VPS を想定すると分かりやすいと思います
- B を Windowsマシン とします
- 出張時にこのマシンを用いて社内のローカルWebサービスにつなぎたいけどどうすればいいの、みたいな状況です
- 以下のような位置関係で、この関係において A と B が相互に通信したいということです
A (LAN)
-----X (INTERNET)
-----B (LAN)
手順は以下のとおりです。
- A から X に対して
$ ssh -R 12345:localhost:80 your_username@X-machine.address -f -N
として A と X をつなぎます- これによって X から A につなぐことができます
- すなわち A は LAN内 にも関わらず、インターネット上に公開されている X からつなげられます
- B から X につなぐ
- B から X に SSHクライアント で接続します
- 単に B と X との間の問題なので、これだけがしたいならば Tera Term などでも済みます
- 「X と A が相互につながって」おり「B と X も相互につながった」ので「B と A が相互につなげられる」ようにする
- ここで上記の設定を XShell で行います
- ソースホスト は
localhost
- リッスンポート は
54321
- 対象ホスト は
localhost
localhost
とは X から見た X自身 を指しています
- 宛先ポート は
12345
- 先程
$ ssh -R 12345:localhost:80 your_username@X-machine.address -f -N
で指定したとおりです
- 先程
- B の Webブラウザ で接続してみる
- これで B の Webブラウザ で
http://localhost:54321
にアクセスしてページが表示されれば OK です - 接続先は A のマシンの 80番ポート で提供されているコンテンツです
- これで B の Webブラウザ で
補足
Windows側 で sshd が動かせるならば、もちろん XShell を用いなくても構いません。