Apache Guacamole を使って自宅 Ubuntu マシンに SSH 接続してみた
以前、Cloudflare Zero Trust Tunnel の「ブラウザレンダリング SSH」機能を使って、ブラウザ上から自宅の Ubuntu マシンへと SSH 接続をした。
機能的にはコレで申し分ないのだが、SSH 接続するたびに秘密鍵をコピペしないといけないのが若干面倒だった。また、ブラウザ上から Ubuntu の GUI デスクトップにもリモートデスクトップ接続出来たらいいなーと思い、やり方を調べたところ Apache Guacamole というフリーソフトが使えそうだったので試してみた。
試行錯誤した結果、以下のように Docker Compose で準備してやると簡単だった。
# 適当な作業ディレクトリを作る
$ mkdir guacamole && cd $_
# Guacamole 用の PostgreSQL DB を構築するための SQL ファイルを出力する
$ mkdir ./init
$ chmod -R +x ./init
$ docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --postgresql > ./init/initdb.sql
# ボリュームマウント用の空ディレクトリを作る
$ mkdir ./drive ./record ./data
# 以下の Docker Compose ファイルを用意する
$ touch docker-compose.yml
docker-compose.yml
ファイルの内容は次のようにする。guacd
というバックエンドサービス、guacamole
フロントエンド、それからユーザ管理などを保存しておく PostgreSQL データベースから構成される。
docker-compose.yml
networks:
guacnetwork:
driver: bridge
services:
guacd:
container_name: guacamole-guacd
image: guacamole/guacd
networks:
- guacnetwork
restart: always
volumes:
- ./drive:/drive:rw
- ./record:/record:rw
postgres:
container_name: guacamole-postgres
image: postgres:15-alpine
environment:
PGDATA: /var/lib/postgresql/data/guacamole
POSTGRES_DB : guacamole_db
POSTGRES_PASSWORD: guacamole_pass
POSTGRES_USER : guacamole_user
volumes:
- ./init:/docker-entrypoint-initdb.d:z
- ./data:/var/lib/postgresql/data:Z
networks:
- guacnetwork
restart: always
guacamole:
container_name: guacamole
image: guacamole/guacamole
depends_on:
- guacd
- postgres
environment:
GUACD_HOSTNAME: guacd
POSTGRES_HOSTNAME: postgres
POSTGRES_DATABASE: guacamole_db
POSTGRES_PASSWORD: guacamole_pass
POSTGRES_USER : guacamole_user
volumes:
- ./record:/record:rw
ports:
- 8080:8080/tcp
networks:
- guacnetwork
restart: always
外部公開しているのは guacamole
の 8080
ポート。$ docker compose up -d
でコンテナ群を起動したら、
http://localhost:8080/guacamole
にアクセスしてみる。/guacamole
パスを忘れないこと。
うまくいくとログイン画面が表示されると思うので、ユーザ ID・パスワードともに初期値の guacadmin
でログインする。
そしたら「設定」よりパスワードを変更したり、「接続」から接続先情報を設定したりしていく。
SSH に関しては、Guacamole を起動している localhost
自身に対して、SSH 接続に必要な秘密鍵を貼り付けて保存しておいてやれば良い。ちゃんと設定できていれば「ホーム」から SSH 接続ができるはずだ。
GUI デスクトップ接続については、当方の Ubuntu 24.04 マシンの GNOME デスクトップで試したところ、xrdp
も tigervnc
も、うまく設定して接続することが出来なかった。ココら辺は Guacamole のせいというワケではなく、xrdp や TigerVNC の設定の詰めの問題だと思われるが、とにかく自分はうまくいかなかったので GUI 接続に関しては断念;;。
また、今回は localhost に対する SSH や RDP・VNC 接続を試しているが、この Ubuntu マシンから接続できる他のマシン、例えば Windows マシンへの RDP などを接続先として設定することも可能だ。Guacamole が ~/.ssh/config
的な役割を果たしてくれて、ココから色々なマシンに、色々な接続方式でリモートデスクトップ接続できるワケだ。これは素晴らしい。
今回はとりあえず、ブラウザ上で Guacamole を経由しての SSH 接続はできるところまで設定をした。
最後に、この http://localhost:8080/
に対して Cloudflare Zero Trust Tunnel でトンネルを作ってやる。ちゃんと設定できれば https://guacamole.example.com/guacamole
といった感じの URL で Guacamole の管理画面にアクセスできるようになる。
コレで、秘密鍵を都度コピペしないといけなかった Cloudflare の「ブラウザレンダリング SSH 接続」よりは若干お手軽に SSH 接続できるようになった。