SSHトンネルでRDP接続してみた

# 背景・目的
以前、下記の記事で踏み台サーバへの多段接続、リモート接続を個別に試してみました。
今回は、踏み台サーバ＋リモートデスクトップを試してみたいと思います。


https://qiita.com/zumax/items/c56c4274941040e4985c

https://qiita.com/zumax/items/88e7d07b6dd7bb6c217d


# 実践
下記の構成を構築します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/082d3522-4f94-4145-b556-15e3936201fc.png)

## 前提
### VPC
以前、下記で作成したVPCを再利用します。下記が用意されています。
- Public Subnet * 1
- Private Subnet * 1
- NAT
- IGW

https://qiita.com/zumax/items/88e7d07b6dd7bb6c217d#vpc

## EC2インスタンスの起動
1. 下記の要領で作成します

|項目|踏み台サーバ|プライベートマシン|
|:--|:--|:--|
|用途|踏み台|リモートデスクトップ|
|サブネットワーク|パブリック|プライベート|
|セキュリティグループ|・ポート：22<BR>・ソース：自分のPC|・ポート：3389、22<BR>・ソース：踏み台サーバのSG|
|OS|Amazon Linux|Ubuntu|
|IPアドレス|Public <BR>Private|Privateのみ|


## SSH Configの設定とProxy Jump
1. `.ssh/config`を下記の修正します
    ```conf
    
    Host bastion # 踏み台のEC2
      HostName <Public IP>
      User ubuntu
      IdentityFile ~/.ssh/bastion-key.pem
    
    Host rdp # プライベートサブネットのEC2
      HostName <Private IP>
      User ubuntu
      IdentityFile ~/.ssh/private-key.pem
      ProxyJump bastion
    ```

1. `ssh rdp`でProxy Jumpを使用してログインします。できました
    ```bash
    ~ % ssh rdp
    Welcome to Ubuntu 24.04.2 LTS (GNU/Linux 6.8.0-1024-aws x86_64)
    
     * Documentation:  https://help.ubuntu.com
     * Management:     https://landscape.canonical.com
     * Support:        https://ubuntu.com/pro
    
     System information as of Sun Apr 20 05:16:25 UTC 2025
    
      System load:  0.01              Processes:             106
      Usage of /:   34.0% of 6.71GB   Users logged in:       0
      Memory usage: 27%               IPv4 address for enX0: XX.XX.XX.XX
      Swap usage:   0%
    
     * Ubuntu Pro delivers the most comprehensive open source security and
       compliance features.
    
       https://ubuntu.com/aws/pro
    
    Expanded Security Maintenance for Applications is not enabled.
    
    40 updates can be applied immediately.
    To see these additional updates run: apt list --upgradable
    
    Enable ESM Apps to receive additional future security updates.
    See https://ubuntu.com/esm or run: sudo pro status
    
    
    *** System restart required ***
    Last login: Sun Apr 20 05:14:00 2025 from XX.XX.XX.XX
    To run a command as administrator (user "root"), use "sudo <command>".
    See "man sudo_root" for details.
    
    ubuntu@ip-XX-XX-XXX-XXX:~$ 
    ```
## EC2のセットアップ
### UbuntuにGUI(xfce4)とxrdpをインストール
下記と同様にインストールします。

https://qiita.com/zumax/items/c56c4274941040e4985c#ubuntu%E3%81%ABguixfce4%E3%81%A8xrdp%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB

1. `apt update & upgrade`します
    ```bash
    sudo apt update && sudo apt upgrade -y
    ```

1. `xfce4 xfce4-goodies xrdp`をインストールします
    ```bash
    sudo apt install xfce4 xfce4-goodies xrdp -y
    ```

1. セッションをxfce4に設定します
    ```bash
    ~$ echo xfce4-session > ~/.xsession
    ~$ cat ~/.xsession
    xfce4-session
    ~$ 
    ```
1. 再起動します
    ```bash
    sudo systemctl restart xrdp
    ```
### パスワードを設定（初回ログイン用）
1. パスワードを入力します
    ```
    ~$ sudo passwd ubuntu
    New password: 
    Retype new password: 
    passwd: password updated successfully
    ~$ 
    ```
## クライアントPCから接続
### SSHトンネルを作成
1. `~/.ssh/config`を設定します
    ```conf
    Host bastion # 踏み台のEC2
      HostName <Public IP>
      User ubuntu
      IdentityFile ~/.ssh/bastion-key.pem
    
    Host rdp-tunnel
      HostName  <Private IP>       # RDPマシンのプライベートIP
      User ubuntu                  
      ProxyJump bastion            # bastion を経由
      IdentityFile ~/.ssh/private-key.pem
      LocalForward 13389 127.0.0.1:3389
      ExitOnForwardFailure yes
      ServerAliveInterval 60
    ```
1. 下記で接続します
    ```bash
    ssh rdp-tunnel
    ```
### Windows Appからの接続
以前、下記でセットアップしたMicrosoft Remote Desktopを使用します。

https://qiita.com/zumax/items/c56c4274941040e4985c#mac%E3%81%ABmicrosoft-remote-desktop%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB

1. Windows Appを起動します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/4e448de4-0de8-4c18-a468-ffaf559f17b9.png)

1. 「Add PC」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/689a243e-b261-4dbf-8199-6aac76d5ad1b.png)


1. 「PC name」に`localhost:13389`を入力し、「Add」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/0d386fdf-ede8-4c71-91ec-4383e2226f24.png)

1. 「Connect」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/dac178d9-4e07-4462-b34d-7b3a4d4979b1.png)

1. あらかじめ作成したUsernameとPasswordを入力し、「Continue」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/0d86cb5e-2721-4a48-bb59-0fafdf9ca004.png)

1. 接続できました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/1c1f7c41-b4c6-4ee9-a038-7001cb0c0271.png)

1. Terminalを起動してみます。設定したマシンのIPアドレスとユーザが確認できました
    ```bash
    ubuntu@ip-XXXX:~$ `id
    > 
    > ^C
    ubuntu@ip-XXXX:~$ 
    ubuntu@ip-XXXX:~$ id
    uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),24(cdrom),27(sudo),30(dip),105(lxd)
    ubuntu@ip-XXXX:~$ uname -a
    Linux ip-XXXX 6.8.0-1024-aws #26-Ubuntu SMP Tue Feb 18 17:22:37 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
    ```

# 考察
今回、踏み台（Bastion）を経由してプライベートサブネット上のUbuntuサーバーに対し、SSHトンネルを使ってRDP接続を行う構成を構築・検証しました。結果として、リモートデスクトップ接続できました。


# 参考
https://qiita.com/zumax/items/88e7d07b6dd7bb6c217d

https://qiita.com/zumax/items/c56c4274941040e4985c