📕

【備忘録】クライアントレスのApache Guacamoleを構築してみる

2022/08/14に公開

Apache Guacamoleを構築する機会があったのですが、わかりにくい記事&情報が古い記事が多かったので、備忘録程度に書いていきます。

本編

おまじない

$ sudo apt update
$ sudo apt-get update

サーバー本体のインストール

  1. Apache Guacamoleに絶対に必要な依存関係をインストールしていきます。
$ sudo apt install build-essential libcairo2-dev libjpeg-turbo8-dev libpng-dev libtool-bin uuid-dev libossp-uuid-dev
  1. 他にも必要そうなライブラリを自分でインストールしておきます。(公式ドキュメントに記載されているので、各自見てみてください。)
$ sudo apt install libavcodec-dev libavformat-dev libavutil-dev libswscale-dev freerdp2-dev libpango1.0-dev libssh2-1-dev libvncserver-dev libssl-dev libvorbis-dev libwebp-dev
  1. ソースコードをダウンロード&解凍していきます。
$ wget -O "guacamole-server-1.4.0.tar.gz" https://apache.org/dyn/closer.lua/guacamole/1.4.0/source/guacamole-server-1.4.0.tar.gz?action=download
$ tar -xzf guacamole-server-1.4.0.tar.gz
$ cd guacamole-server-1.4.0
  1. ビルドをしていきます。
$ sudo ./configure --with-init-dir=/etc/init.d
$ sudo make
$ sudo make install
  1. インストールされたライブラリのキャッシュを更新して、systemdを再読み込みします。
$ sudo ldconfig
$ sudo systemctl daemon-reload
  1. guacdを起動していきます。
$ sudo systemctl start guacd
$ sudo systemctl enable guacd
  1. ホームディレクトリにもどっておきます。
$ cd

ブラウザ上で操作できるようにする

  1. Apache Tomcatというライブラリが必要(ぽい?)のでインストールしておきます。
$ sudo apt install tomcat9 tomcat9-admin tomcat9-common tomcat9-user
  1. Guacamole Clientをダウンロードします。
$ wget -O "guacamole-1.4.0.war" https://apache.org/dyn/closer.lua/guacamole/1.4.0/binary/guacamole-1.4.0.war?action=download
  1. クライアントをTomcatのWebディレクトリに移動しておきます。
$ sudo mv guacamole-1.4.0.war /var/lib/tomcat9/webapps/guacamole.war
  1. Apache TomcatとGuacdを再起動します。
$ sudo systemctl restart tomcat9 guacd
  1. guacamoleホームディレクトリ環境変数を設定します。
$ echo "GUACAMOLE_HOME=/etc/guacamole" >> sudo /etc/default/tomcat9

データベース認証の設定をしていく

  1. MariaDBをインストールします。
$ sudo apt install mariadb-server -y
  1. MariaDBには最低限の設定をすることができるコマンドがあるので、実行して設定していきます。
$ sudo mysql_secure_installation
Enter → y → y → n → y → y
  1. 後で、必要になってくるディレクトリを先に作成しておきます。
$ sudo mkdir -p /etc/guacamole/extensions
$ sudo mkdir -p /etc/guacamole/lib
  1. JDBC driverが必要なのでダウンロードしていきます。
$ wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.26.tar.gz
$ tar -xf mysql-connector-java-8.0.26.tar.gz
$ sudo cp mysql-connector-java-8.0.26/mysql-connector-java-8.0.26.jar /etc/guacamole/lib/
  1. JDBC Auth Pluginをダウンロードしていきます
$ wget -O "guacamole-auth-jdbc-1.4.0.tar.gz" https://apache.org/dyn/closer.lua/guacamole/1.4.0/binary/guacamole-auth-jdbc-1.4.0.tar.gz?action=download
$ tar -xf guacamole-auth-jdbc-1.4.0.tar.gz
$ sudo mv guacamole-auth-jdbc-1.4.0/mysql/guacamole-auth-jdbc-mysql-1.4.0.jar /etc/guacamole/extensions/
  1. 必要なテーブルや設定を行っていきます。
$ sudo mysql -u root -p
mysql> CREATE DATABASE guacamole_db;
mysql> CREATE USER 'guacamole_user'@'localhost' IDENTIFIED BY 'ChangeME';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> quit
  1. SQLスキーマファイルをMySQLデータベースにインポートしていきます。
$ cd guacamole-auth-jdbc-1.4.0/mysql/schema
$ cat *.sql | sudo mysql -u root -p guacamole_db
$ sudo micro /etc/guacamole/guacamole.properties
  1. guacamole.propertiesに設定を記入していきます。
# MySQL properties
mysql-hostname: localhost
mysql-port: 3306
mysql-database: guacamole_db
mysql-username: guacamole_user
mysql-password: [ChangeME]
  1. 最後に、設定を反映するために、関連のデーモンを再起動しておきます。
$ sudo systemctl restart tomcat9 guacd mysql
  1. そしたら、http://[IPアドレス]:8080/guacamoleにアクセス。
  2. ユーザー名にguacadmin、パスワードに同じくguacadminを入力すると、ログインできます。
  3. 初期パスワードだと、セキュリティ的に危険なので、右上のguacadmin>設定>ユーザー設定にいくと、パスワードの変更があるので、新しいパスワードを設定してください。

以上で、Apache Guacamoleが使えるようになります!お疲れさまでした!

Raspberry PiにSSH接続できなくて困った話

Apache Guacamoleを経由して、ローカルネットワーク上にあるRaspberry Piに接続しようとしたところ、全く接続できなく、5、6時間奮闘してました...
原因は、libssh2というライブラリ(?)に原因があるようで、Ubuntu22.04LTSなどの最新のOSのOpenSSHの新しいキー交換には対応してなかったぽいです。
対処法としては、/etc/ssh/sshd_configの末尾に、HostKeyAlgorithms +ssh-rsaを追記して、

$ sudo systemctl restart ssh

とすると接続できるようになりました。

参考にしたサイト

Installing Apache Guacamole on Ubuntu and Debian
Ubuntu22.04にApacheGuacamoleをインストールします
Install Guacamole Remote Desktop on Ubuntu 22.04 (Jammy Jellyfish)
Guacamole SSH Not working/reddit
Apache guacamole can't SSH into Ubuntu 22.04
SSH public key authentication fails with "Unable to extract public key from private key"

Discussion