SSH サーバを踏み台にして、直接アクセスすることができないWindows Server に対して、リモートデスクトップ接続します。
下の図で、Windows Clientから Windows Server に直接アクセスすることはできませんが、SSH Server を経由してリモートデスクトップ接続します。
構成
- Windows Client
リモートデスクトップで使用する端末
OS は Windows 10 - SSH Server
Windows Clientから接続可能なサーバー
OS が Windows Server 2019 の場合、SSH Serverは下記の記事を参照してインストール
>> オフライン環境で Windows Server 2019 に OpenSSH Server をインストール - Windows Server
SSH Server から接続可能なサーバ― (Windows Client から直接アクセスすることはできない)
OS は Windows Server 2019
接続方法
SSH トンネルの確立
Windows Client の コマンドプロンプトで、下記のコマンドを実行します。
ssh -L 33389:192.168.1.1:3389 <ユーザー>@x.x.x.x
ユーザー : SSH Server のユーザー名
Windows 10 には、デフォルトで SSH Client の機能がインストールされています。
下記の画面で、SSH ユーザーのパスワードを入力します。
<ユーザー>@x.x.x.x 's password:
表示されるコマンドプロンプトは、閉じずに最小化しておきます。
リモートデスクトップ接続
Windows Client のリモートデスクトップ接続で、下記の情報を入力して接続します。
コンピューター : localhost:33389
ユーザー名 : リモートデスクトップ接続先の Windows Server のユーザー名
以上で、SSH サーバを踏み台にして、直接アクセスすることができないWindows Server に対して、リモートデスクトップ接続ができます。
バッチファイルで接続を簡単にする方法
上記の接続手順を、バッチファイルで簡単に実行する方法を説明します。
バッチファイル内に、ユーザー名とパスワードの情報をプレーンテキストで格納するので、自己責任で実施してください。
Windows 用 Linux サブシステム (WSL) のインストール
パスワードを自動入力するために Linux の sshpass を使用します。Windows で sshpass を使用するため、下記の手順で Windows 用 Linux サブシステム (WSL) と Ubuntu 環境をインストールし、その上に sshpass をインストールします。
(1) 下記を参照し、Windows Client に Windows 用 Linux サブシステム をインストールします。
>> Windows 10 に WSL2 をインストールして Ubuntu 環境を使う
(2) WSL 上の Ubuntu にて下記のコマンドを実行し、sshpass をインストールします。
sudo apt-get -y install ssphass
rdp ファイルの作成
Windows Client のリモートデスクトップ接続で、下記の情報を入力して「名前を付けて保存」をします。
コンピューター : localhost:33389
ユーザー名 : リモートデスクトップ接続先の Windows Server のユーザー名
ここでは、C:\rdp\localhost-33389.rdp として保存します。
実行バッチファイルの作成
下記の内容のバッチファイルを作成し、ssh-rdp.bat として保存します。
start /min wsl sshpass -p "<パスワード>" ssh -L 33389:192.168.1.1:3389 <ユーザー名>@x.x.x.x
powershell sleep 5
start mstsc C:\rdp\localhost-33389.rdp
パスワード : SSH Server のパスワード
ユーザー名 : SSH Server のユーザー名
Windows 上から wsl コマンドにより、WSL 上の Linux コマンドを実行できます。
WSL 上の sshpass で 、パスワード認証の SSH 接続をし、SSH トンネルを確立しています。
start /min wsl sshpass -p "<パスワード>" ssh -L 33389:192.168.1.1:3389 <ユーザー名>@x.x.x.x
SSH トンネルの確立に時間がかかるため、少し待機します。それぞれの環境で、待機時間は調整してください。
powershell sleep 5
作成した RDP ファイルを実行します。
start mstsc C:\rdp\localhost-33389.rdp
上記のバッチファイル ssh-rdp.bat を実行することで、SSH トンネルの確立とリモートデスクトップ接続を一括で実行可能です。