はじめに
最近、Amazon DCVを使って、Linuxインスタンスにデスクトップ接続する機会があったので、そこでの試行錯誤をまとめました。
まずはAmazon DCVでAmazon Linux 2023にデスクトップ接続できることを確認して、次にデフォルトのec2-user
以外のユーザーで接続してみます。
なお、Amazon DCVでAmazon Linux 2023に接続できるのは、2025年4月1日に発表があったAL2023.7
のバージョンからになります。
Amazon DCVについて
Amazon DCVとは?
Amazon DCV は、高性能のリモートディスプレイプロトコルです。さまざまなネットワーク条件で、リモートデスクトップやアプリケーションストリーミングをクラウドやデータセンターからあらゆるデバイスへ安全に配信できます。Amazon DCV と Amazon EC2 を使用すると、グラフィックスを多用するアプリケーションを Amazon EC2 インスタンス上でリモートで実行できます。結果をより控えめなクライアントマシンにストリーミングできるため、高価な専用ワークステーションが不要になります。
簡単に言えば、「サーバーにグラフィカルなデスクトップ環境で接続できるようにするサービス」です。EC2でLinuxサーバーを構築した場合、通常デスクトップ接続できませんが、このAmazon DCVを使うとデスクトップ環境に接続することが出来ます。
ちなみに、以前はNICE DCVという名前でしたが、2024年10月1日から、Amazon DCVに名前が変わりました。
セッションについて
Amazon DCVサーバーをLinuxに構築してアクセスするわけですが、アクセスする前にセッションを作成する必要があります。セッションには2種類あります。
- コンソールセッション
- セッションは同時に1つしか作成できない。つまり、1つのインスタンスに接続できるのは1人のみ
- デフォルトで作成されるのはこちら
-
sudo
つけないとcreateコマンドが実行できない
- 仮想セッション
- セッションは複数作成できる
- ただし、複数接続する場合は、コンソールセッションよりリソースを使う。つまり、より高スペックのインスタンスが必要
- 検証でt2.smallを使ったとき、仮想セッションだとフリーズした
-
sudo
つけなくてもcreateコマンド実行できる
今回は、コンソールセッションを利用します。
Amazon Linux 2023にDCVで接続してみる
こちらの記事通りに、以下を実行します。
- EC2インスタンスを作成(Amazon Linux 2023)
- この時、
t2.small
以上のインスタンスタイプにする
- この時、
- セキュリティグループを修正
- 8443ポートへの接続を許可する
- GNOME Desktopをインストール
- DCV serverをインストール
- XDummy driverをインストール
- コンソールセッション、またはGPUの共有を利用するときはこれを使う必要あり
- DCVサーバーの設定ファイル(
dcv.conf
)の修正- DCVサーバー起動時に、
ec2-user
のユーザーでコンソールセッションを自動で作成する設定を追加
- DCVサーバー起動時に、
- EC2の再起動
-
ec2-user
のパスワード設定- 通常、EC2では
ec2-user
でログインするとき秘密鍵を使いますが、DCVではパスワード認証のため、パスワードを設定する
- 通常、EC2では
上記を実行した後、https://<EC2のIPアドレス>:8443
にアクセスすると、以下のようにDCVの認証画面が表示されます。
その後、Amazon Linux 2023の認証画面が表示されるのでその認証も実施すると、デスクトップ画面が表示されました。
デスクトップなので、ディレクトリをウィンドウで見たり、テキストエディタで編集ができます。もちろんターミナルも開くことが出来ます。
最後に、一旦Log Outをしておきましょう。
以上で、ec2-user
でAmazon Linux 2023にデスクトップ接続することが出来ました。
次は、デフォルトのユーザー以外で接続を試してみます。
デフォルトユーザー以外で接続してみる
EC2インスタンス1台に対して複数のユーザーがアクセスする場合や、1台を1名が使うとしても複数ユーザーを作成して接続したい場合はあると思います。
それを想定して、デフォルトのec2-user
以外のユーザーを作成して、このEC2インスタンスに接続してみます。
前提として、今回は1台のEC2には1人しか同時にアクセスしないとします。複数ユーザーが同時に1台のEC2インスタンスにアクセスすることは考えません。つまり、コンソールセッションを利用するということです。
セッションの違いについては、本記事のこちらをご覧ください。
ユーザー作成&パスワード変更
以下を実施して、user1
という名前のユーザーを作成します。
sudo adduser user1
作成したユーザーのパスワードを変更します。
sudo passwd user1
パスワード認証を許可する
デフォルトでは、SSHではパスワード認証はできないようになっています。それを変更します。
以下を実施して、SSHサーバーの設定ファイルを開きます。
sudo vi /etc/ssh/sshd_config
以下の部分が元々noになっているはずなので、yesに変更します。
PasswordAuthentication yes
この設定は、DCVで接続する際には不要です。この後、新しいユーザーでDCVの接続をする際に、SSHでまず接続してからコンソールセッションを作成するために実施しています。
それも秘密鍵で接続することも可能だと思いますが、より簡単な方法で実施するために、パスワード認証でログインしようとしています。
sudoの実行を許可する
先ほどのユーザーはsudoで実行する権限を持っていないので、付与します。
以下を実行して、sudo権限周りの設定ファイルを開きます(こちらはnanoエディタで開きます)。
sudo visudo
以下を最後の1行として追加します。
user1 ALL=(ALL) ALL
新しいユーザーSSH接続する
私はTera Termで接続していますが、先ほどのユーザー名とパスワードの認証で接続ができました(秘密鍵は使っていません)。
コンソールセッションの終了
現在、ec2-user
がOwnerのコンソールセッションが作成されています。このままだと、DCVで認証できるのはec2-user
だけです。user1
でコンソールセッションを作成するために、まずは既存のセッションを終了します。
現在、サーバーが起動するたびに自動でec2-user
がOwnerのコンソールセッションを作成するように設定されています。以下を実施することで、自動で作成されたコンソールセッション(名前はconsole
)を終了します。
sudo dcv close-session console
コンソールセッション(Owner:user1)を作成
以下を実施して、コンソールセッションを作成します。
sudo dcv create-session "console" --type=console --owner "user1"
ちなみに、セッション作成で指定できるオプションなどは以下の公式ドキュメントで確認できます。
また、現在有効なセッションは、以下のコマンドで確認できます。
dcv list-sessions
新しいユーザーでDCVに接続
先ほどのDCV認証画面のページで、user1
ユーザーでログインしてみます。
Linuxの認証を実施すると、こちらのユーザーでもログインすることが出来ました!
先ほどとユーザーが異なるので、作成したテキストファイルも存在していません。
ちなみに、今のuser1
のコンソールセッションが存在する状態で、ec2-user
でDCVの認証してみようとすると、以下のような表示が出て接続されません。Ownerで指定されているユーザーのみが、DCVでログインできます。
(任意)セッション自動作成の無効化
今回のように、複数の別ユーザーがセッションを作成する場合は、DCVサーバー起動時に自動でec2-user
がOwnerのコンソールセッションが作成されてほしくありません。
そのため、以下を実行して、セッション自動作成を無効化します。
sudo vi /etc/dcv/dcv.conf
以下のように、falseに変更します。
create-session = false
また、このdcv.conf
で指定できるパラメータは、以下に細かく載っているので、参考にしてください。
おわりに
今回は、Amazon DCVを使ってAmazon Linux 2023にデスクトップ接続してみました。
DCVについてはあまり使用例が多くなく、色々と手探りなところもあるので、今後も検証していきたいと思います。
最後に、よく使うセッション関連のコマンドをまとめておきます。
# コンソールセッションの作成
sudo dcv create-session "console" --type=console --owner "user1"
# セッションの終了
sudo dcv close-session console
# セッションの確認
dcv list-sessions