踏み台サーバー経由で Windows にリモートデスクトップ接続する

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 トンネルの確立とリモートデスクトップ接続を一括で実行可能です。