こんにちはますのです。
先日別部署の方から「LinuxにRDP接続したいから設定よろしく」と言われて驚いた筆者でした。
Linuxってssh接続がデフォじゃないの??そもそも3389のRDP接続って出来るの??という疑問から始まったのでした。
調べてみると確かに出来るのですね…。「xrdp」なるものを使うということであれこれ試してみようと思います。
GUIモードがあるからもしかしてと思いましたが、GUIモードであればRDP接続可能ということで理解です。「Linux=SSH接続」という固定概念を破壊され、柔軟な頭を持ちたいと思った次第であります。
やりたいことのざっくり説明
- AWS上に作ったEC2インスタンス(AmazonLinux2)に対してインターネット経由でRDP接続を行う。
- 接続の際は伝送路が暗号化される「XRDP」を使用する。
Azureとやり方が違うことに気付く
現場ではAzureでやっていたので手順は同じだろうとAWSに構築しようとしたのです。
Amazon Linux 2でGNOMEをインストールしようとしたところ、groupのリストで「GNOME」が表示されないことに気付いたのです。
# yum group list hidden
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Installed Groups:
AMI
AMI (minimal)
Base (minimal)
Core
Available Groups:
AWS Tools
Base
Container
Development Tools
OnPrem
OnPrem (minimal)
buildsys-build
あぁ…。OSやクラウド環境によってやり方違うのか…。とここで初めて気づいたので模索を始めました。
ちなみにAzureはこちらの手順を参考にやってました。
Microsoft Azure上でのCentOS仮想マシン作成と、リモートデスクトップ接続でWindowsからGUIインストールする手順 – Elixir Report
表示されている通り「”GNOME”」と打ち換えたところインストール出来ました。
Amazon Linux 2にGUI環境をインストールする
さて困った。が、やはり私ごときが疑問に思うことなんて先人の方たちが既に通っている道。
色々調べたところ、AWSの公式ドキュメントに手順を見つけました。
Amazon Linux 2 を実行している Amazon EC2 インスタンスに GUI をインストールする方法を教えてください。
手順では「VNC」を利用しているので、途中まで参考にします。
AmazonLinux2のバージョン確認
今回の手順は「Amazon Linux 2」のみに適用されるようなので、バージョン確認をします。
「VERSION=”2″」を確認しました。
# cat /etc/os-release
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"cat /etc/os-release
MATE デスクトップ環境をインストールする
まずはMATEパッケージをインストールします。
※MATE は GNOME 2 をベースにした軽量の GUI で、Amazon Linux 2 用の追加サービスとして利用できます。Amazon WorkSpaces の Amazon Linux 2 サービスでは、MATE を使用しています。
# amazon-linux-extras install mate-desktop1.x
続いてMATE をデフォルトのデスクトップとして定義します。
今回は特定ユーザだけではなく、全ユーザが対象となるように設定します。
# bash -c 'echo PREFERRED=/usr/bin/mate-session > /etc/sysconfig/desktop'
TigerVNC をインストールする
VNCソフトとして「TigerVNC」のパッケージをインストールします。
# yum install tigervnc-server
続いてVNC固有のパスワードを設定します。
表示専用のパスワードを入力するか確認するメッセージが表示されたら、「n」を押します。
# vncpasswd
vncpasswd
Password: ///6~8文字程度の独自パスワード
Verify: ///もう1回独自パスワード入力
Would you like to enter a view-only password (y/n)? n ///「n」を選択する
A view-only password is not used
XRDPをインストールする
ここから先の手順はAWSの公式ドキュメントから外れます。
まずはamazon-linux-extrasでepelリポジトリを利用出来るようにインストールします。
# amazon-linux-extras install epel
続いてxrdpパッケージをインストールします。
# yum install xrdp
最後に「systemctl」コマンドで、xrdpの起動と起動設定を行います。
# systemctl start xrdp
systemctl start xrdp
# systemctl enable xrdp
Created symlink from /etc/systemd/system/multi-user.target.wants/xrdp.service to /usr/lib/systemd/system/xrdp.service.
以上で前準備が完了となります。
リモートデスクトップで接続を試してみる
では実際に接続を試してみましょう。
事前に以下の2点に注意です。
- セキュリティグループでRDPを接続許可しているか
- パスワードを設定したユーザが存在するか
実際に見ていきましょう。
クライアントPCでリモートデスクトップを起動し、AWS上のEC2インスタンスのパブリックIP or Elastic IPを入力します。
下図のようにxrdpのログイン画面が表示されればEC2インスタンスまで通信が到達しています。
EC2インスタンスまで通信が届いていないのでこの時点で接続が出来ない場合はネットワーク周りを確認しましょう。
EC2インスタンスに作成しているユーザのID/PWでログインをしてみましょう。
下図のようにログインが出来れば成功です。
補足:ログイン時のパスワード設定について
XRDPではパスワードでのログインが必要となるため、パスワード設定がされているユーザがいない場合ログインが出来ません。
筆者は事前にxrdp接続用のユーザを用意して試しました。
# useradd xrdp-testuser
# passwd xrdp-testuser
Changing password for user xrdp-testuser.
New password: //xrdpで接続時に利用するパスワード入力
Retype new password: //もう一回同じパスワードを入力
passwd: all authentication tokens updated successfully.
なお「/etc/ssh/sshd_config」を変更する必要はありません。
あくまでもxrdpの時にパスワードが必要となるだけとなり、ssh接続時のパスワード設定は「no」のままでもそのまま通ります。
筆者の環境ではssh接続時のパスワード認証は「no」としたうえで実行しログインが出来ました。
# grep ^Password /etc/ssh/sshd_config
PasswordAuthentication no
以上が「Amazon Linux2」でWindows端末からリモートデスクトップ接続する方法となります。
余談:意外と容量は少なくて済むことが分かる
GNOMEインストール時に容量が結構必要だったような気がしたので30GBで足りるか不安でした。
設定が全部終わった後に容量を見てみると「3GB」程度しか使っていなそうな気配です。
# df -m
Filesystem 1M-blocks Used Available Use% Mounted on
devtmpfs 482 0 482 0% /dev
tmpfs 492 0 492 0% /dev/shm
tmpfs 492 1 492 1% /run
tmpfs 492 0 492 0% /sys/fs/cgroup
/dev/xvda1 30708 1940 28769 7% /
tmpfs 99 0 99 0% /run/user/1000
tmpfs 99 1 99 1% /run/user/1001
Windows的な感覚でいたので、GUIなのにとても軽量で驚きです。あれこれ入れるともう少し容量食いそうですが構築の際の参考にしてもらえれば幸いです。