個人的に愛用しているApache Guacamoleの導入メモを記します (今後の自分が再構築する時用のメモでもある)。Apache Guacamole (以下、Guacamoleと表記) とは、ウェブブラウザを介してリモートデスクトップ接続 (RDP), VNC接続, SSH接続などを行えるようにしてくれる便利なソフトウェアです。マシン操作や管理のための接続環境を一カ所にまとめておくことができますし、どの接続方法を用いるにしても操作する側に必要なのはウェブブラウザのみとなります。
Guacamole導入の方針としては、gihyo.jpの次の記事 (公開日: 2020-04-01) を基本的に参考にして最小構成を用意しつつ、Guacamoleの動作に用いるDockerはRootless modeでセットアップする、というアレンジを加えることにします。
なお、Guacamole上のユーザ管理を行ったり、リバースプロキシを別途用意してGuacamoleへHTTPS接続できるようにすると、より実用性が高まりますが今回は省略します。
Apache Guacamoleを導入するサーバとして、今回はUbuntu Server 22.04.3 LTS (Jammy Jellyfish) を想定します。また、以降の手順で導入されるDocker EngineとApache Guacamoleのバージョンは記事執筆時点で次の表のようになります。
ソフトウェア | バージョン | 備考 |
---|---|---|
Docker Engine | 24.0.6 | 2023-10-22時点 |
Apache Guacamole | 1.5.3 | 2023-10-22時点 |
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh ./get-docker.sh --dry-run
$ sudo sh ./get-docker.sh
$ id -u
1000
$ whoami
testuser
$ grep ^$(whoami): /etc/subuid
testuser:100000:65536
$ grep ^$(whoami): /etc/subgid
testuser:100000:65536
$ sudo apt-get install -y dbus-user-session # →今回の環境にはすでに導入済みだった
$ which dockerd-rootless-setuptool.sh
/usr/bin/dockerd-rootless-setuptool.sh
$ dockerd-rootless-setuptool.sh install # →uidmapが導入されていない旨が表示された
$ sudo apt-get install -y uidmap
$ dockerd-rootless-setuptool.sh install
(省略)
[INFO] Make sure the following environment variable(s) are set (or add them to ~/.bashrc):
export PATH=/usr/bin:$PATH
[INFO] Some applications may require the following environment variable too:
export DOCKER_HOST=unix:///run/user/1000/docker.sock
~/.bashrc
の末尾に「export 〜
」を2行追加します$ vim ~/.bashrc
$ tail -n 3 ~/.bashrc
# CUSTOM
export PATH=/usr/bin:$PATH
export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock
上記手順でDockerをRootless modeで導入してそのままのデフォルト状態ですと、当該ユーザのセッションが存在している間のみDockerが実行される状態です (例: 当該ユーザがSSHログインしている間)。
今回の用途のように当該ユーザのセッション状態に関係なく、Guacamoleを常時サービスするためには、systemd/User - ArchWiki > Automatic start-up of systemd user instances を参考に、次の1の追加設定が必要です。
$ loginctl enable-linger
$ ssh -l testuser <サーバのIPアドレス> 'systemctl --user status docker.service'
第613回 Apache Guacamoleを使ってWebブラウザからWindows 10にリモート接続する | gihyo.jp を参考にしていきます。
$ mkdir -p ~/docker/guacamole/
$ cd ~/docker/guacamole/
MYSQL_ROOT_PASSWORD
(1箇所) と MYSQL_PASSWORD
(2箇所) の値を任意のパスワード文字列へ変更すること)$ vim docker-compose.yml
# Ref: https://gihyo.jp/admin/serial/01/ubuntu-recipe/0613#sec2
version: "3"
services:
guacd:
container_name: my-guacd
image: guacamole/guacd
restart: always
guacamole_db:
container_name: my-guacamole-db
image: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: guacamole_root_password # NEED TO CHANGE
MYSQL_DATABASE: guacamole_db
MYSQL_USER: guacamole_user
MYSQL_PASSWORD: guacamole_user_password # NEED TO CHANGE
volumes:
- ./dbdata:/var/lib/mysql
- ./dbinit:/docker-entrypoint-initdb.d
guacamole:
container_name: my-guacamole
image: guacamole/guacamole
restart: always
environment:
GUACD_HOSTNAME: my-guacd
MYSQL_HOSTNAME: my-guacamole-db
MYSQL_DATABASE: guacamole_db
MYSQL_USER: guacamole_user
MYSQL_PASSWORD: guacamole_user_password # NEED TO CHANGE
GUACAMOLE_HOME: /guacamole-home
volumes:
- ./home:/guacamole-home
depends_on:
- guacamole_db
- guacd
ports:
- "8080:8080"
$ mkdir -p dbdata dbinit home/extensions
$ docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > ./dbinit/initdb.sql
$ docker compose up -d
(省略)
✔ Network guacamole_default Created
✔ Container my-guacamole-db Started
✔ Container my-guacd Started
✔ Container my-guacamole Started
今回の導入手順のメモの分量からも分かるように、Dockerの導入手順はまあまあの量がありますが、Dockerを用いたApache Guacamoleの導入自体は少ない手順で行うことができました。複数のマシンが色々と存在する一般のご家庭や業務の場に、接続環境を一元化できるGuacamoleをひとつセットアップしておくと便利に使えるのではないでしょうか。踏み台として用途に合うならとてもおすすめです。ちなみにGuacamoleでは、操作ログの保存 (スクリーンレコーディング) や、認証方法として二要素認証を取り込むこともできるようです。
そして最後に重要なことを書きます。今回の記事執筆時に初めて気づいたこととして、guacamoleは「ワカモレ」と読むのだそうです。私は何年間も職場などでGuacamoleの布教に勤しんできたのに発音を間違って読んでいたらしい……。orz