約束の地

キャロ組

XShell を用いて SSHトンネル を作る方法

XShell

Windows用 の SSHクライアント です。現状ではこれが Windows ではベストだと思っています。個人利用ならばフリーです。

SSHトンネルを構築する

XShell を用いて SSHトンネルを構築する方法を示します。なお、事前の準備としていわゆる踏み台サーバの設定が必要になります。その設定が済んでいるものとして、以下、説明をします。

1. メニューから「ファイル」→「新規」とたどって新しいセッションを作りはじめる

f:id:gregminster:20180519094522p:plain

2. 設定メニューを「接続」→「SSH」→「トンネリング」とたどって設定画面を表示させる

f:id:gregminster:20180519094738p:plain

3. 「追加」ボタンを押します

f:id:gregminster:20180519100022p:plain

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番ポート で提供されているコンテンツです

補足

Windows側 で sshd が動かせるならば、もちろん XShell を用いなくても構いません。

*1:よく頭がこんがらがる

*2:少々分かりづらいですが……

Powered by はてなブログ