Windows10でもリモートデスクトップ接続したいだけなのにわざわざVPNを繋ぎたくない

リモートデスクトップ接続したいだけなのにわざわざVPNを繋ぎたくない

をWindows10でもやってみた

環境

[Windows10 PC]−(インターネット)→[Ubuntu Server]→[Windows PC]

設定メモ

※ sshトンネルを受け入れるUbuntu Server側の設定はリモートデスクトップ接続したいだけなのにわざわざVPNを繋ぎたくないを参照

いまどきはWindows10にもsshコマンドが標準でインストールされている

Microsoft Windows [Version 10.0.19042.906]
(c) Microsoft Corporation. All rights reserved.

C:\Users\staff01>ssh -V
OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5

認証用の鍵を生成する

Microsoft Windows [Version 10.0.19042.906]
(c) Microsoft Corporation. All rights reserved.

C:\Users\staff01>ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\staff01/.ssh/id_rsa):
Created directory 'C:\Users\staff01/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\staff01/.ssh/id_rsa.
Your public key has been saved in C:\Users\staff01/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:UDdeOOFtU0KY0dD4lH+Bn/LVQbjkr2NyqB/qIKPHp88 staff01@DESKTOP-JQ1DBQM
The key's randomart image is:
+---[RSA 4096]----+
|        . *%+.=. |
|       . +*+=* o |
|      .   o+*.o =|
|       .   ..=.o+|
|        S     +..|
|               o |
|    .o .   .. .  |
|    .o+.. .o.=   |
|   ...+E.+o.+ .  |
+----[SHA256]-----+

生成された公開鍵をUbuntu Serverのauthorized_keysに追記する

USBメモリなどに生成されたid_rsa.pubをコピーして、既に設定済みの端末から該当のアカウントの.ssh/authorized_keysファイルに追記します
パスワード認証も有効にしておけばscpコマンドで転送したり、sshコマンドで接続してコピペもできるのでしょうが、どれだけ複雑なパスワードを設定していたとしても外向きに公開しているサーバーでパスワード認証を使えるようにしておくのは絶対に止めましょう

接続テスト

Microsoft Windows [Version 10.0.19042.906]
(c) Microsoft Corporation. All rights reserved.

C:\Users\staff01>ssh staff01@gatekeeper

  • sshトンネルを経由してWindows PCにRDP接続する
Microsoft Windows [Version 10.0.19042.906]
(c) Microsoft Corporation. All rights reserved.

C:\Users\user>ssh -N -L 13389:172.29.100.253:3389 staff01@gatekeeper
C:\Users\user>mstsc /v:localhost:13389 /admin

便利になりそうなバッチファイルを作成する

@echo off
Set /P SERVER=接続先のIPアドレス?:
Set /P USERNAME=ユーザー名?:
Set /P PASSWORD=パスワード?:

rem sshトンネルを接続する
start /b ssh -N -L 13389:%SERVER%:3389 gatekeeper

rem RDP接続する
Timeout 3
rem Windows資格情報を作成する
Cmdkey /generic:TERMSRV/localhost /user:%USERNAME% /pass:%PASSWORD%
rem mstsc /v:localhost:13389
mstsc /v:localhost:13389 /admin

rem 作成したWindows資格情報を削除する
Cmdkey /delete:TERMSRV/%SERVER%

rem sshを終了する
taskkill /F /IM ssh.exe

.sshのconfigファイルはWindows10でも書いておける

Host gatekeeper
    Hostname gatekeeper.example.co.jp
    Port 22222
    User staff01
Host rdbroker
    Hostname 172.31.0.254
    ProxyCommand C:\Windows\System32\OpenSSH\ssh.exe gatekeeper -W %h:%p
    Port 22223
    User staff01

のようにしておくと、接続に多段なsshトンネルが必要な場合も対応できる

※ Windows環境でProxyCommandを指定するときは、sshコマンドの絶対パスで指定するようにする