Installing Apache Guacamole on RPI
Apache Guacamole is a clientless remote desktop gateway https://guacamole.apache.org/ which an be used to get SSH, RDP, VNC .. on the web browser using HTML5
The following is an installation on a Raspberry Pi 2B+ running Raspbian 8:
All commands were done as root user
Update the OS $ apt-get update $ apt-get upgrade
Install the Dependencies $ apt-get install libcairo2-dev libjpeg62-turbo-dev libpng-dev libossp-uuid-dev libavcodec-dev libavutil-dev libswscale-dev libpango1.0-dev libssh2-1-dev libtelnet-dev libvncserver-dev libpulse-dev libssl-dev libvorbis-dev libwebp-dev
Download the packages from Guacamole Release https://guacamole.apache.org/releases/ root@BB-8:~# wget 'http://apache.org/dyn/closer.cgi?action=download&filename=guacamole/1.1.0/source/guacamole-server-1.1.0.tar.gz' -O guacamole-server-1.1.0.tar.gz root@BB-8:~# wget 'http://apache.org/dyn/closer.cgi?action=download&filename=guacamole/1.1.0/source/guacamole-client-1.1.0.tar.gz' -O guacamole-client-1.1.0.tar.gz
Extract the Tar files and build the Guacamole server $ tar -xzf guacamole-server-1.1.0.tar.gz $ cd guacamole-server-1.1.0 $ ./configure --with-init-dir=/etc/init.d ..... ------------------------------------------------ guacamole-server version 1.1.0 ------------------------------------------------ Library status: freerdp2 ............ no pango ............... yes libavcodec .......... yes libavutil ........... yes libssh2 ............. yes libssl .............. yes libswscale .......... yes libtelnet ........... yes libVNCServer ........ yes libvorbis ........... yes libpulse ............ yes libwebsockets ....... no libwebp ............. yes wsock32 ............. no Protocol support: Kubernetes .... no RDP ........... no SSH ........... yes Telnet ........ yes VNC ........... yes Services / tools: guacd ...... yes guacenc .... yes guaclog .... yes FreeRDP plugins: no Init scripts: /etc/init.d Systemd units: no Type "make" to compile guacamole-server. $ make $ make install $ update-rc.d guacd defaults $ ldconfig
Compile the Guacamole Client $ tar -xvf guacamole-client-1.1.0.tar.gz $ cd guacamole-client-1.1.0 Install tomcat8 Package $ apt install tomcat8 Install Openjdk-8-JDK $ apt install openjdk-8-jdk Download the maven binary from https://maven.apache.org/download.cgi Compile the Guacamole-client using mvn package It took around 40mins for compilation and download all the necessary package $ ~/guacamole-client-1.1.0# /root/apache-maven-3.6.3/bin/mvn package …. [INFO] --- maven-assembly-plugin:2.5.3:single (make-source-archive) @ guacamole-client --- [INFO] Reading assembly descriptor: project-assembly.xml [INFO] Building tar: /root/guacamole-client-1.1.0/target/guacamole-client-1.1.0.tar.gz [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary for guacamole-client 1.1.0: [INFO] [INFO] guacamole-common …………………………….. SUCCESS [01:16 min] [INFO] guacamole-ext ……………………………….. SUCCESS [01:40 min] [INFO] guacamole-common-js ………………………….. SUCCESS [ 7.425 s] [INFO] guacamole …………………………………… SUCCESS [07:30 min] [INFO] guacamole-auth-cas …………………………… SUCCESS [03:11 min] [INFO] guacamole-auth-duo …………………………… SUCCESS [01:08 min] [INFO] guacamole-auth-header ………………………… SUCCESS [01:01 min] [INFO] guacamole-auth-jdbc ………………………….. SUCCESS [ 7.232 s] [INFO] guacamole-auth-jdbc-base ……………………… SUCCESS [01:31 min] [INFO] guacamole-auth-jdbc-mysql …………………….. SUCCESS [ 53.872 s] [INFO] guacamole-auth-jdbc-postgresql ………………… SUCCESS [01:27 min] [INFO] guacamole-auth-jdbc-sqlserver …………………. SUCCESS [01:43 min] [INFO] guacamole-auth-jdbc-dist ……………………… SUCCESS [01:31 min] [INFO] guacamole-auth-ldap ………………………….. SUCCESS [07:27 min] [INFO] guacamole-auth-openid ………………………… SUCCESS [01:17 min] [INFO] guacamole-auth-quickconnect …………………… SUCCESS [01:30 min] [INFO] guacamole-auth-totp ………………………….. SUCCESS [02:12 min] [INFO] guacamole-example ……………………………. SUCCESS [ 36.275 s] [INFO] guacamole-playback-example ……………………. SUCCESS [ 3.657 s] [INFO] guacamole-client …………………………….. SUCCESS [01:30 min] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 37:48 min [INFO] Finished at: 2020-03-17T22:35:09+04:00 [INFO] ------------------------------------------------------------------------
Copy the generated war file towards the webapps folder of tomcat8 $ ~/guacamole-client-1.1.0# cp guacamole/target/guacamole-1.1.0.war /var/lib//tomcat8/webapps/guacamole.war
Create configuration file for Guacamole $ mkdir -p /etc/guacamole $ cat /etc/guacamole/guacamole.properties # Hostname and port of guacamole proxy #guacd-hostname: localhost #guacd-port: 4822 # Auth provider class (authenticates user/pass combination, needed if using the provided login screen) auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider basic-user-mapping: /etc/guacamole/user-mapping.xml Generate The password $echo "password" |md5sum The user-mapping file
cat /etc/guacamole/user-mapping.xml
<user-mapping>
<authorize
username="xxxx"
password="b8sf34r3f34gf3"
encoding="md5">
<connection name="BB-8">
<protocol>ssh</protocol>
<param name="hostname">localhost</param>
<param name="port">22</param>
<param name="swap-red-blue">false</param>
<param name="enable-audio">true</param>
</connection>
</authorize>
</user-mapping>
Start the GUACD server and Tomcat8 $ /etc/init.d/tomcat8 start [ ok ] Starting tomcat8 (via systemctl): tomcat8.service. $ /etc/init.d/guacd start Starting guacd: guacd[13606]: INFO: Guacamole proxy daemon (guacd) version 1.1.0 started SUCCESS
The Application Should be running on port 8080
Once login, the SSH console should be open allow the user to use it through web browser
Instead of opening port 22, everything can be exposed only via https.
References:
https://guacamole.apache.org/releases/1.1.0/
http://www.m-opensolutions.com/?p=936
https://guacamole.apache.org/doc/gug/configuring-guacamole.html