📕
【備忘録】クライアントレスのApache Guacamoleを構築してみる
Apache Guacamoleを構築する機会があったのですが、わかりにくい記事&情報が古い記事が多かったので、備忘録程度に書いていきます。
本編
おまじない
$ sudo apt update
$ sudo apt-get update
サーバー本体のインストール
- Apache Guacamoleに絶対に必要な依存関係をインストールしていきます。
$ sudo apt install build-essential libcairo2-dev libjpeg-turbo8-dev libpng-dev libtool-bin uuid-dev libossp-uuid-dev
- 他にも必要そうなライブラリを自分でインストールしておきます。(公式ドキュメントに記載されているので、各自見てみてください。)
$ 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
- ソースコードをダウンロード&解凍していきます。
$ 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
- ビルドをしていきます。
$ sudo ./configure --with-init-dir=/etc/init.d
$ sudo make
$ sudo make install
- インストールされたライブラリのキャッシュを更新して、systemdを再読み込みします。
$ sudo ldconfig
$ sudo systemctl daemon-reload
-
guacd
を起動していきます。
$ sudo systemctl start guacd
$ sudo systemctl enable guacd
- ホームディレクトリにもどっておきます。
$ cd
ブラウザ上で操作できるようにする
- Apache Tomcatというライブラリが必要(ぽい?)のでインストールしておきます。
$ sudo apt install tomcat9 tomcat9-admin tomcat9-common tomcat9-user
- 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
- クライアントをTomcatのWebディレクトリに移動しておきます。
$ sudo mv guacamole-1.4.0.war /var/lib/tomcat9/webapps/guacamole.war
- Apache TomcatとGuacdを再起動します。
$ sudo systemctl restart tomcat9 guacd
- guacamoleホームディレクトリ環境変数を設定します。
$ echo "GUACAMOLE_HOME=/etc/guacamole" >> sudo /etc/default/tomcat9
データベース認証の設定をしていく
- MariaDBをインストールします。
$ sudo apt install mariadb-server -y
- MariaDBには最低限の設定をすることができるコマンドがあるので、実行して設定していきます。
$ sudo mysql_secure_installation
Enter → y → y → n → y → y
- 後で、必要になってくるディレクトリを先に作成しておきます。
$ sudo mkdir -p /etc/guacamole/extensions
$ sudo mkdir -p /etc/guacamole/lib
- 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/
- 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/
- 必要なテーブルや設定を行っていきます。
$ 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
- 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
-
guacamole.properties
に設定を記入していきます。
# MySQL properties
mysql-hostname: localhost
mysql-port: 3306
mysql-database: guacamole_db
mysql-username: guacamole_user
mysql-password: [ChangeME]
- 最後に、設定を反映するために、関連のデーモンを再起動しておきます。
$ sudo systemctl restart tomcat9 guacd mysql
- そしたら、
http://[IPアドレス]:8080/guacamole
にアクセス。 - ユーザー名に
guacadmin
、パスワードに同じくguacadmin
を入力すると、ログインできます。 - 初期パスワードだと、セキュリティ的に危険なので、右上の
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