0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Amazon DCVの認証成功時に自動でセッションを作成する

Last updated at Posted at 2025-07-03

はじめに

以前、Amazon DCVの基本的な内容をまとめた記事を書きました。

本記事では、Amazon DCVのPAM認証機構を活用して、認証突破と同時にDCVセッションを自動作成する方法を解説します。

やりたいこと

そもそも、Amazon DCVでログインするためには、まずDCVのセッションを作成しないといけません。具体的には、以下のようなコマンドを実行してあげる必要があります。

# コンソールセッションの作成
sudo dcv create-session "console" --type=console --owner "user1"

このようにownerがuser1のセッションを作成すると、user1でログインできるようになります。

ただ、これだと

  • sshでインスタンスにログインする
  • DCVセッションをコマンドで作成する
  • DCVの認証画面でIDとパスワードを入れて認証する

とDCVで認証する前にsshでインスタンスにログインする必要があります。それは面倒です。そこで、DCVの認証を突破した直後に、裏で自動的にセッションを作成したいというのが、今回の目的です。

前提

  • OSはRHEL9
  • Amazon DCVや関連するパッケージはインストール済み

やってみる

大まかにどういう仕組みで実現できるかを説明します。

DCVの認証は、デフォルトだと、Linuxのユーザー認証の仕組みであるPAM(Pluggable Authentication Modules)を使います。このPAMは、設定ファイルを変更すると、認証時の動作を変更できます。

それを使って、認証の動作の中にDCVセッションを作成するシェルスクリプトを実行するように仕込みます。こうすることで、DCV認証を突破したらそのシェルスクリプトが実行され、DCVセッションが自動で作成されます。

PAMサービスの変更

上記を参考に、PAMのファイルを変更します。
/etc/pam.d/dcvがデフォルトの設定ファイルですが、以下のようになっています。これが、デフォルトの認証時の動作です。

auth    include password-auth
account include password-auth

そのデフォルトの設定ファイルは変更せずに、/etc/pam.d/dcv-customを新しく作成して、以下のような内容に編集します。

auth    required pam_exec.so /usr/local/bin/dcv-auto-session.sh
auth    include password-auth
account include password-auth

1行目が、シェルスクリプトを仕込んだ部分です。このシェルスクリプトは次で作成します。

authaccount等の意味は、こちらの記事が参考になります

shファイルの作成

以下のコマンドで、シェルスクリプトを作成します。

sudo touch /usr/local/bin/dcv-auto-session.sh

そして、以下の内容に編集します。

#!/bin/bash
sudo dcv create-session "$PAM_USER" --owner "$PAM_USER" --type=console

$PAM_USERは、現在の認証ユーザーを示しています。つまり、DCVの認証画面で入力されたUsernameです。ownerをそのUsernameで指定することで、そのユーザーが使えるDCVセッションが作成されます。

セッション名もユーザー名にしていますが、ここは固定の名前でもOKです。

今回は、最低限セッションを作成するだけのかなりシンプルなものにしています。実際は、既にセッションが作成されているか確認したり、ログを出力したりすることになると思います。

DCVのconfig修正

また、上記を参考に、/etc/dcv/dcv.confを編集して、[authentication]セクションを以下のように書き換えます。

[authentication]
pam-service=dcv-custom

これで、先ほど作成したPAMの設定が使用されるようになりました。

dcv Userにsudo権限付与

DCVサービスが先ほどのシェルスクリプトを実行することになるが、現在の権限設定だと実施ができません。そのため、dcv Userにsudo権限を付与します。
以下を実行すして、sudo権限の設定ファイルを開きます。

sudo visudo

一番下の行に以下を追加します。

dcv ALL=(ALL) NOPASSWD: /bin/dcv

これで、dcv Userにパスワード認証なしでsudoが実行できるようになりました。

sudo権限を付与することで、意図しない操作が可能になるケースもあるのでご注意ください。

DCVサーバー再起動

以下を実行して、DCVサーバーを再起動します。

sudo systemctl restart dcvserver

接続してみる

DCVでの接続の前に、sshでログインして、セッションが作成されていないことを確認します。

[ec2-user@ip-172-12-13-456 ~]$ dcv list-sessions
There are no sessions available.

さて、この状態でDCVの認証を突破してみます。普通なら、セッションが無いので接続できないはずです。

image.png

Sign inを押すと・・・

image.png

入れました!!

改めて、ssh接続している方でセッションを確認してみます。

[ec2-user@ip-172-12-13-456 ~]$ dcv list-sessions
Session: 'ec2-user' (owner:ec2-user type:console)

無事にセッションが作成されていました。

デフォルトだと、DCVが起動した際に自動でセッションが作成されるはずですが、今回の設定をする場合はその機能をオフにしておきましょう。

おわりに

デスクトップ接続できるのがウリなのに、最初にセッション作っておかないといけないってちょっと不便ですよね。今回の記事のようなことが、デフォルトで出来るようにならないかなぁと思っております。

では、今後も快適なDCV生活をお過ごしください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?