ぱろっと・すたじお

技術メモなどをまったりと / my site : http://parrot-studio.com/

SSHトンネリングでWindowsのリモートデスクトップをつなぐ

※2009/12/22追記


手順をかなり勘違いしていて、実際はもっと簡単な話だったっぽいです
サーバ側で何かしら実行する必要はなく、
ただシンプルにSSHトンネルを開けばいけるようで・・・


参考:Windows開発環境 SSH Client PuTTY - System House ACT




ちょっとした事情があり、
セキュアなリモートデスクトップ環境が必要になりまして


単にLinuxを操作するだけならSSHでログインすれば済むのですが、
今回は外からWindowsを操作したいのです


だからといって、単純にリモート用のポートを開けるなんて論外で、
かといってVPNみたいにお金がかかることはしなくない
(というか、未だVPNの仕組みがよくわかってない・・・)


というわけでいろいろ方法を模索していたのですが、
友人id:smile_logがうまいこと方法を見つけてくれました(`・ω・´) b


そうだ トンネルを掘ろう - smile_logの日記


これをベースに、今回SSHトンネリングを使って、
リモートデスクトップをつなぐまでの手順を...φ(・ω・`)

前提

  • 接続元(外部)Windows機:A
  • Linuxサーバ:B
  • 接続先Windows機:C
  • AとBは秘密鍵によるSSH接続可能
  • BとCは同じネットワークに所属
  • Cはリモート接続の許可だけで何もしてない

手順


 1. SSHでAからBに接続


これ自体は2.を実行するための手段でしかなく、
2.を事前に実行できるなら不要です


 2. Bで以下を実行

 ssh 127.0.0.1 -L 2222:192.168.xxx.yyy:3389 -N

一つずつ説明すると、「ssh 127.0.0.1」ってことで、
自身へのsshを確立する、の意味ですね


友人の記事ではここを自鯖のドメインにしてましたが、
自分の場合はこれでいけました


次の「-L」オプションが肝です
まず「192.168.xxx.yyy:3389」の部分がリモート接続先CのIPとポートです


ここを内部ネットワークで利用したいIPやポートに変更することで、
こちらのように内部からルータの管理画面に入ったりできます


わかりづらいのが「2222」の部分です
ここは自由に設定可能なのですが、
いわば「トンネルの入り口ポート」の指定です


SSHトンネルは複数開くことが可能ですが、
その場合は各ポート番号を別にする必要があります


最後の「-N」はよくわからんのですが、
接続数を表しているらしく、これを実行するとフロントで待ち状態になり、
外して実行するとバックグラウンドで待ちになります
(後は詳しい人にお任せΣ(・ω・ノ)ノ)


 3. SSHトンネルへの接続を開く


ここまではサーバBでの作業でしたが、
ここからは
接続元Aの作業になります


友人id:smile_logはTeraTermでやってますが、
私はPuTTYなので、ちょっと試行錯誤が必要でした(´・ω・`)


細かい手順はこちら(´・ω・)っ


SSHポートフォワーディングの設定


要は、[SSH]->[トンネル]の設定が肝なのですが、
間違えやすいのが「送り先」に入力するところです


さっきの例だと、「送り先」に入力するのは「192.168.xxx.yyy:3389」であり、
あくまで「SSHで入った先のネットワークでのIP/ポート」になります
つまり、2.でオプションに付けた文字列をそのまま入れるわけです


あと、「源ポート」に入力する「2222」は、
接続元Aで使用されてないことが必要ですが、
Aの所属するルータで「2222」を解放する必要はありません


 4. リモートデスクトップをローカルに対して開く


Aでリモートデスクトップの接続先に「127.0.0.1:2222」を指定します
これでCに対してリモートでつながるわけですが・・・
直感的にはわかりづらいですよね(´・ω・`)

  1. Aが自分の2222に接続しにいく
  2. 3.で実行したPuTTYが2222への接続を横取りしてSSH経由でBに流す
  3. Bはポート2222宛てとして受け取ったパケットをCにそのまま受け渡す
  4. Cでリモートを開く


こんな感じですか
(説明が正しいかどうかは知らない( ゚Д゚)y─┛~~)



途中でも書きましたが、これを応用すると、
SSHのポートだけ開けておけば、好きなサービスにアクセスできることになります


途中の経路は当然暗号化されてますので、
外出先で自宅のPCを安全に操作したりできるわけです
こうなると、EMとかUQと契約したくなるな・・・


ただ、接続のたびにPuTTYを2つ開かなければならないのが面倒といえば面倒なので、
何かうまい手があるといいのですが・・・






<おまけ>
余談ですが、リモートデスクトップのサーバになれるのは、
「Professional」以上を搭載したWindows機です
つまり、Vista以降でメインになっている「Home Premium」ではダメです


ずっとXPを使っていると、
つい標準が「Professional」と勘違いしてしまいますが、
この手法を活用する方はOSのバージョンに注意


なお、「Home Premium」でも「UltraVNC」とかを使えば、
今回の応用で接続はできるのですが、
RDP7.0のパフォーマンスに比べるとあまりにも・・・(´・ω・`)