SSHトンネリングでWindowsのリモートデスクトップをつなぐ
※2009/12/22追記
手順をかなり勘違いしていて、実際はもっと簡単な話だったっぽいです
サーバ側で何かしら実行する必要はなく、
ただシンプルにSSHトンネルを開けばいけるようで・・・
参考:Windows開発環境 SSH Client PuTTY - System House ACT
ちょっとした事情があり、
セキュアなリモートデスクトップ環境が必要になりまして
単にLinuxを操作するだけならSSHでログインすれば済むのですが、
今回は外からWindowsを操作したいのです
だからといって、単純にリモート用のポートを開けるなんて論外で、
かといってVPNみたいにお金がかかることはしなくない
(というか、未だVPNの仕組みがよくわかってない・・・)
というわけでいろいろ方法を模索していたのですが、
友人id:smile_logがうまいこと方法を見つけてくれました(`・ω・´) b
これをベースに、今回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]->[トンネル]の設定が肝なのですが、
間違えやすいのが「送り先」に入力するところです
さっきの例だと、「送り先」に入力するのは「192.168.xxx.yyy:3389」であり、
あくまで「SSHで入った先のネットワークでのIP/ポート」になります
つまり、2.でオプションに付けた文字列をそのまま入れるわけです
あと、「源ポート」に入力する「2222」は、
接続元Aで使用されてないことが必要ですが、
Aの所属するルータで「2222」を解放する必要はありません
4. リモートデスクトップをローカルに対して開く
Aでリモートデスクトップの接続先に「127.0.0.1:2222」を指定します
これでCに対してリモートでつながるわけですが・・・
直感的にはわかりづらいですよね(´・ω・`)
こんな感じですか
(説明が正しいかどうかは知らない( ゚Д゚)y─┛~~)
途中でも書きましたが、これを応用すると、
SSHのポートだけ開けておけば、好きなサービスにアクセスできることになります
途中の経路は当然暗号化されてますので、
外出先で自宅のPCを安全に操作したりできるわけです
こうなると、EMとかUQと契約したくなるな・・・
ただ、接続のたびにPuTTYを2つ開かなければならないのが面倒といえば面倒なので、
何かうまい手があるといいのですが・・・
<おまけ>
余談ですが、リモートデスクトップのサーバになれるのは、
「Professional」以上を搭載したWindows機です
つまり、Vista以降でメインになっている「Home Premium」ではダメです
ずっとXPを使っていると、
つい標準が「Professional」と勘違いしてしまいますが、
この手法を活用する方はOSのバージョンに注意
なお、「Home Premium」でも「UltraVNC」とかを使えば、
今回の応用で接続はできるのですが、
RDP7.0のパフォーマンスに比べるとあまりにも・・・(´・ω・`)