Azure Bastion 経由で Windows (SSH), Linux (RDP) 接続を試してみる

Azure Bastion を利用することでパブリック IP アドレスが付与されていないセキュアな環境の VM に対してもポータル経由で RDP, SSH 接続を実施することができます。
今まで Bastion は Windows は RDP のみ、Linux は SSH のみの接続がサポートされていましたが、Bastion Standard SKU を利用することで以下の画面の様に Windows/Linux に限らずプロトコル、TCP ポートを指定して接続できるようになりましたので、Windows (SSH), Linux (RDP) のパターンで手順と動作を確認してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2266293/d71c0ba1-44f4-b7c3-3e17-0d1302024b88.png)

Windows (SSH), Linux (RDP) の接続ができるようになると以下のようなメリットがあると思います。

- Windows の踏み台から Linux へアクセスするような場合、CLI ベース (SSH) でアクセスできる
- Linux でブラウザ等の GUI 操作をしたい
- Windows RDP, Linux SSH 以外の接続プロトコルをトラブルの切り分けとして利用したい


## 参考ドキュメント
https://docs.microsoft.com/ja-jp/azure/bastion/bastion-connect-vm-ssh-windows

https://docs.microsoft.com/ja-jp/azure/bastion/bastion-connect-vm-rdp-linux

## 前提
- Bastion を Standard SKU で構成済みであること
- Windows 10, Ubuntu 18.04 の VM を Bastion と同じ仮想ネットワークに作成済みであること
- NIC, サブネットに NSG が構成されている場合、Bastion サブネットから TCP 22,3389 あての通信が許可されていること (NSG の設定は以下を参照)

https://docs.microsoft.com/ja-jp/azure/bastion/bastion-nsg#apply

## 1. Windows への SSH 接続

### 1-1. Windows VM (Windows 10) へ OpenSSH Server をインストール

Bastion 等で VM に RDP 接続し、以下のドキュメントの手順に従って VM に OpenSSH サーバーをインストールしていきます。
https://docs.microsoft.com/ja-jp/windows-server/administration/openssh/openssh_install_firstuse

[設定] を開き、 [アプリ] > [アプリと機能] の順に選んで、 [オプション機能] を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2266293/fec724e1-f9ce-1cf9-73ee-af8a50d51084.png)

インストール後、Powerhsell を起動し、サービスの起動と自動起動の設定を行っておきます。

```
# Start the sshd service
Start-Service sshd

# OPTIONAL but recommended:
Set-Service -Name sshd -StartupType 'Automatic'
```
### 1-2. Bastion から SSH で Windows VM に接続確認
Bastion の接続画面で、以下の様に "接続設定" 部分で SSH を選択し、VM 作成時に指定したユーザー、パスワードでログインを実施します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2266293/df04913b-d570-61a1-5fb9-a288248824ef.png)

Windows 環境に SSH で接続することができました。
こちらの環境で powershell に切り替え ipconfig を実施することもできました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2266293/a3cb4e8e-7002-aab4-c3b5-e6bb6806016d.png)

試しに TCP の接続状況も確認してみましたが、RDP (3389) はなく、SSH (22) のみが ESTABLISHED となっていることがわかります。Bastion 用のサブネットは 10.20.0.0/26 です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2266293/a12a55c8-9715-17ae-926b-838387f0356e.png)

## 2.Linux への RDP 接続

### 2-1. デスクトップ環境、デスクトップサーバーのインストール
Bastion 等で VM に SSH 接続し、以下の手順に従い xfce, xrdp をインストールしていきます。

https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/use-remote-desktop

以下のコマンドでデスクトップ環境をインストールします。(※数分かかります)

```
sudo apt-get update
sudo apt-get -y install xfce4
sudo apt install xfce4-session
```

以下のコマンドでリモートデスクトップサーバーをインストールし、デスクトップ環境の設定を行います。

```
sudo apt-get -y install xrdp
sudo systemctl enable xrdp

echo xfce4-session >~/.xsession
sudo service xrdp restart
```

#### オプション

GUI 動作確認のため、Firefox もいれておきます。

```
sudo apt-get -y install firefox
```

また、ブラウザベースの Bastion 経由ではファイルのコピー&ペーストはできませんが、RDP 用のネイティブクライアントだとコピー&ペーストが使えますので、コピー&ペースト用に以下のモジュールも入れておきます。

```
sudo apt-get -y install xfce4-clipman
sudo service xrdp restart
```
https://docs.microsoft.com/ja-jp/azure/bastion/connect-native-client-windows

### 2-2. Bastion から RDP で Linux VM に接続確認
Bastion の接続画面で、以下の様に "接続設定" 部分で RDP を選択し、VM 作成時に指定したユーザー、パスワードでログインを実施します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2266293/bbd51bb9-db1b-b440-66b4-e61ed4526703.png)


GUI で接続してブラウザが開けることを確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2266293/0c3b60fb-5948-cf71-2bd1-d5beb5a5ef74.png)


ターミナルで TCP の接続状況も確認してみましたが、SSH (22) はなく、RDP (3389) のみが ESTABLISHED となっていることがわかります。Bastion 用のサブネットは 10.20.0.0/26 です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2266293/bab6b740-1218-e368-5b5d-04aeb4c898ac.png)