MacからコマンドラインのSSHで外部サーバを経由してWindows Serverへリモートデスクトップする方法を説明する。
想定しているのは次のようなケース。(経由サーバはSSHができればLinuxでなくてもよい。)
- Windows Serverがリモートデスクトップ接続を許可しているのは固定IPのみ
- 自分のMac使用環境は動的IPで直接Windows Serverへ接続できない
- 外部にあるLinuxサーバのIPを接続許可してSSH経由でリモートデスクトップ接続したい
環境条件
- Windowsサーバのホスト名: win.example.com
- 経由(Linux)サーバのホスト名: linux.example.com
として説明する。
Mac用リモートデスクトップクライアント
MacのMicrosoft Officeにはリモートデスクトップへ接続するためのアプリ”Remote Desktop Connection”が入っているので、それを使用する。
経由サーバへSSHポートフォーワードする
普段外部のLinuxサーバへ次のようなSSHコマンドで接続しているとする。
ssh user@linux.example.com
このコマンドにLオプションをつけるとポートフォーワードができる。
リモートデスクトップが使用するポートは3389番なのでローカル側、リモート側のポートをどちらも3389を指定する。
ssh -L 3389:win.example.com:3389 user@linux.example.com
細かく説明すると。
ssh -L (ローカル接続ポート):(リモートサーバ):(リモート接続ポート) (ユーザ名)@(経由サーバ)
ホスト名のところはもちろんIPアドレスでもよい。
Macのローカルでリモートデスクトップのポートが開いているはずがないのでローカル接続ポートは3389としている。
余談: 複数のポートフォーワードセッションを使う場合など、好きなローカルポートで試しても大丈夫だが接続先は”localhost:13389″などとしてポート指定をする必要がある。
実行するといつも通りLinuxサーバへログインする感じになる。
ただ、普通にログインしたときと違ってMac側の3389番ポートが開いていることがnetstatで分かる。
[imac ~]$ netstat -an |grep 3389 tcp4 0 0 127.0.0.1.3389 *.* LISTEN tcp6 0 0 ::1.3389 *.* LISTEN
リモートデスクトップへ接続する
Linuxサーバをログアウトするとポートフォーワードも終了してしまうので、ログインした状態のままMicrosoft Officeに同梱されている”Remote Desktop Connection”を立ち上げる。
ローカルホストのポート3389がリモートのWindows Serverのポート3389がつながっているので、ここではlocalhostに対して接続する。
次に証明書がどうとか警告がでるけど気にしないで接続ボタンを押すことにする。
Windows Serverのログイン情報を入力してOKボタンを押す。
ここで結構ハマったのは、デフォルトでドメインの項目に何か書かれたままにしていると、リモートデスクトップがハングアップして接続できない症状があったことだ。Windows Server側でドメインの設定などしていない場合にはドメインの項目が空白にしておいた方がよさそうだ。
うまくいくと、直接リモートデスクトップした場合と同じ画面が表示される。
(画像はローカルの環境で試したWindows7へのリモートデスクトップ時のもの。)
SSHポートフォーワードの終了
リモートデスクトップの接続を切り、Lオプションをつけて接続したSSHのコンソールをログアウトするとSSHポートフォーワードが終了する。