The convenience of having one place to access your servers is something most administrators can consider having in their main course meal every single day. In order to satiate this need, this guide goes into the details of setting up one such platform. By the end of this guide, we should have set up a working Apache Guacamole Server that can be leveraged to provide one place to access all of your servers. Whether they are Windows or Linux, Apache Guacamole is here for you.
Before getting into the crux of this tool, wouldn’t it be good if we knew what it is all bout? Right, let us go ahead and demystify this tool. Apache Guacamole is a clientless remote desktop gateway that supports standard protocols like VNC, RDP, and SSH. Thanks to HTML5, once Guacamole is installed on a server, all you need to access your desktops is a web browser.
Guacamole is separated into two pieces: guacamole-server, which provides the guacd proxy and related libraries, and guacamole-client, which provides the client to be served by your servlet container. In most cases, the only source you will need to build is guacamole-server, and downloading the latest guacamole.war from the project website will be sufficient to provide the client.
For CentOS refer to: Install and Use Guacamole Remote Desktop on CentOS 8
Step 1: Server Preparation
Apache Guacamole has many dependencies and we are going to deal with most of them in this step. Let us get ahead and install all the dependencies that our Guacamole server will require to breathe and live. Get them all installed as follows:
sudo apt update
sudo apt install -y gcc vim curl wget g++ libcairo2-dev libjpeg-turbo8-dev libpng-dev libtool-bin libossp-uuid-dev libavcodec-dev libavformat-dev libavutil-dev libswscale-dev build-essential libpango1.0-dev libssh2-1-dev libvncserver-dev libtelnet-dev libpulse-dev libssl-dev libvorbis-dev libwebp-dev libwebsockets-dev
Install FreeRDP2
We are going to install FreeRDP2 version hosted in the Remmina PPA as follows:
sudo add-apt-repository ppa:remmina-ppa-team/remmina-next-daily
sudo apt update
sudo apt install freerdp2-dev freerdp2-x11 -y
Once the prerequisites are dealt with, we now have the opportunity of having the main course meal which involves a couple of more steps covered next.
Step 2: Install Apache Tomcat
In this step, we are going to install the Apache Tomcat Java servlet container which will run the Guacamole Java war file and thus serves Guacamole java client. Since it is in Java, we will have to get Java installed first.
sudo apt install openjdk-11-jdk
Once it is installed, you can check the version installed
$ java --version
openjdk 11.0.17 2022-10-18
OpenJDK Runtime Environment (build 11.0.17+8-post-Ubuntu-1ubuntu220.04)
OpenJDK 64-Bit Server VM (build 11.0.17+8-post-Ubuntu-1ubuntu220.04, mixed mode, sharing)
Install Tomcat and all the required packages with the command:
sudo apt install tomcat9 tomcat9-admin tomcat9-common tomcat9-user
Once installed, start and enable the service:
sudo systemctl enable --now tomcat9
And Tomcat should be running happily
$ systemctl status tomcat9
tomcat9.service - Apache Tomcat 9 Web Application Server
Loaded: loaded (/lib/systemd/system/tomcat9.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2023-08-16 13:27:41 EDT; 2min 48s ago
Docs: https://tomcat.apache.org/tomcat-9.0-doc/index.html
Main PID: 18458 (java)
Tasks: 29 (limit: 4660)
Memory: 101.3M
CPU: 5.938s
CGroup: /system.slice/tomcat9.service
└─18458 /usr/lib/jvm/java-11-openjdk-amd64/bin/java -Djava.util.logging.config.file=/var/lib/tomcat9/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLo>
~
Tomcat listens on port 8080 by default and as you can guess, we need to allow access to the application remotely by allowing the port on the firewall. This is as simple as a one-line command as shown below:
sudo ufw allow 8080/tcp
Step 3: Build the Guacamole Server From Source
guacamole-server contains all the native, server-side components required by Guacamole to connect to remote desktops. It provides a common C library, libguac, which all other native components depend on, as well as separate libraries for each supported protocol, and a proxy daemon, guacd, the heart of Guacamole.
Download the Latest Stable Version of guacamole-server
cd ~/
VER=1.5.3
wget https://archive.apache.org/dist/guacamole/$VER/source/guacamole-server-$VER.tar.gz
Extract the source tarball after download
tar xzf ~/guacamole-server-*.tar.gz
Change into the guacamole server source code directory;
cd ~/guacamole-server-*/
Then execute the configure script to check if any required dependency is missing and to adapt Guacamole server to your system.
./configure --with-init-dir=/etc/init.d
The command above will lead to a long trickle of outputs. When it ends, you should see the following output which should have a yes on the following: RDP, SSH, Telnet, and VNC.
guacamole-server version 1.5.3
------------------------------------------------
Library status:
freerdp2 ............ yes
pango ............... yes
libavcodec .......... yes
libavformat.......... no
libavutil ........... yes
libssh2 ............. yes
libssl .............. yes
libswscale .......... yes
libtelnet ........... yes
libVNCServer ........ yes
libvorbis ........... yes
libpulse ............ no
libwebsockets ....... no
libwebp ............. yes
wsock32 ............. no
Protocol support:
Kubernetes .... no
RDP ........... yes
SSH ........... yes
Telnet ........ yes
VNC ........... yes
Services / tools:
guacd ...... yes
guacenc .... no
guaclog .... yes
FreeRDP plugins: /usr/lib/x86_64-linux-gnu/freerdp2
Init scripts: /etc/init.d
Systemd units: no
Type "make" to compile guacamole-server.
After that, simply run the make command as advised in the last message
make
Give it some time while it does its thing. Once it finishes, install the guacamole server as follows
sudo make install
To finish it all, run the ldconfig command to create the necessary links and cache to the most recent shared libraries found in the guacamole server directory.
sudo ldconfig
sudo mkdir -p /etc/guacamole/{extensions,lib}
Create guacd.conf
configuration file:
$ sudo vim /etc/guacamole/guacd.conf
[daemon]
pid_file = /var/run/guacd.pid
#log_level = debug
[server]
#bind_host = localhost
bind_host = 127.0.0.1
bind_port = 4822
#[ssl]
#server_certificate = /etc/ssl/certs/guacd.crt
#server_key = /etc/ssl/private/guacd.key
Refresh systemd for it to find the guacd (Guacamole proxy daemon) service installed in /etc/init.d/ directory.
sudo systemctl daemon-reload
Once reloaded, start and enable the guacd service.
sudo systemctl start guacd
sudo systemctl enable guacd
And to have that mood put on turbo lift, check its status.
$ systemctl status guacd
● guacd.service - LSB: Guacamole proxy daemon
Loaded: loaded (/etc/init.d/guacd; generated)
Active: active (running) since Wed 2023-08-16 13:34:38 EDT; 5s ago
Docs: man:systemd-sysv-generator(8)
Tasks: 1 (limit: 4660)
Memory: 9.9M
CPU: 12ms
CGroup: /system.slice/guacd.service
└─32087 /usr/local/sbin/guacd -p /var/run/guacd.pid
...
Step 4: Install the Guacamole Web Application
There are two critical files involved in the deployment of Guacamole: guacamole.war, which is the file containing the web application, and guacamole.properties, the main configuration file for Guacamole. The recommended way to set up Guacamole involves placing these files in standard locations, and then creating symbolic links to them so that Tomcat can find them.
guacamole-client contains all Java and Maven components of Guacamole (guacamole, guacamole-common, guacamole-ext, and guacamole-common-js). These components ultimately make up the web application that will serve the HTML5 Guacamole client to users that connect to your server. This web application will connect to guacd, part of guacamole-server, on behalf of connected users in order to serve them any remote desktop they are authorized to access.
The Guacamole client is available as a binary. To install it, just pull it from the Guacamole binaries downloads page as shown below, copy it to /etc/guacamole/ directory and rename it at the same time.
VER=1.5.3
wget https://archive.apache.org/dist/guacamole/$VER/binary/guacamole-$VER.war
sudo mkdir /etc/guacamole
To install the Guacamole client binary, move the Guacamole client to Tomcat webapps directory as shown below;
sudo mv guacamole-$VER.war /var/lib/tomcat9/webapps/guacamole.war
Step 5: Configure Guacamole Server
After the installation of the Guacamole server daemon, you need to define how to Guacamole client will connect to the Guacamole server (guacd) under the /etc/guacamole/guacamole.properties configuration file. Within this configuration, you need to simply define Guacamole server hostname, port, user mapping configuration file, and authentication provider.
GUACAMOLE_HOME is the name given to Guacamole’s configuration directory, which is located at /etc/guacamole by default. All configuration files, extensions, etc. reside within this directory.
Create GUACAMOLE_HOME environment variable
echo "GUACAMOLE_HOME=/etc/guacamole" | sudo tee -a /etc/default/tomcat
echo "export GUACAMOLE_HOME=/etc/guacamole" | sudo tee -a /etc/profile
Create /etc/guacamole/guacamole.properties config file and populate it as shown below:
$ sudo vim /etc/guacamole/guacamole.properties
guacd-hostname: localhost
guacd-port: 4822
After the configuration is as pretty as above, save it and proceed to set the required authentication as shown below.
Step 6: Setup Guacamole Database Authentication
Guacamole’s default authentication method reads all users and connections from a single file called user-mapping.xml. In this file, you need to define the users allowed to access Guacamole web UI, the servers to connect to and the method of connection. But there, we will use database authentication which is recommended for production environments.
First, ensure that MariaDB or MySQL has been installed:
Once installed, log in as the root user:
sudo mysql -u root -p
Create the required database and user for Guacamole:
REATE DATABASE guacamole_db;
CREATE USER 'guacamole_user'@'localhost' IDENTIFIED BY 'Passw0rd!';
GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user'@'localhost';
FLUSH PRIVILEGES;
QUIT
Next, we need to install the MySQL Java Connector. First, export the latest available version:
VER=8.1.0
Now pull the archive:
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j-$VER.tar.gz
Extract and copy the file to the /etc/guacamole/lib/ directory:
tar -xf mysql-connector-j-*.tar.gz
sudo cp mysql-connector-j-$VER/mysql-connector-j-$VER.jar /etc/guacamole/lib/
We also need to download the JDBC auth plugin. Also here, export the latest available version:
VER=1.5.3
Download the archive:
wget https://downloads.apache.org/guacamole/$VER/binary/guacamole-auth-jdbc-$VER.tar.gz
Extract the file and move it to /etc/guacamole/extensions/ as shown:
tar -xf guacamole-auth-jdbc-$VER.tar.gz
sudo mv guacamole-auth-jdbc-$VER/mysql/guacamole-auth-jdbc-mysql-$VER.jar /etc/guacamole/extensions/
You now need to import database schemas. To do so, switch to the below directory:
cd guacamole-auth-jdbc-*/mysql/schema
Import schemas by running the below command:
cat *.sql | sudo mysql -u root -p guacamole_db
Remember to provide your MySQL root password to proceed.
Now adjust your Guacamole config to accommodate your database as shown:
sudo vim /etc/guacamole/guacamole.properties
Add your database details in the file:
##MySQL properties
mysql-hostname: 127.0.0.1
mysql-port: 3306
mysql-database: guacamole_db
mysql-username: guacamole_user
mysql-password: Passw0rd!
Save the file and restart the services:
sudo systemctl restart tomcat9 guacd
Step 7: Getting Guacamole Web Interface
Thus far, we have set up everything well and we should therefore be ready to access the application we have been toiling to bring up. To access Guacamole’s web interface, simply point your browser to http://ip-or-domain-name:8080/guacamole
and you should be greeted with a login screen as shown below:

On the above page, log in with the default creds guacadmin as the username and guacadmin as the password. Once authenticated, you need to create another admin user and delete the old default user.
To add a new user, navigate to Settings ->User->New User.

Ensure all the permissions are enabled for the new admin user. Once created, log out and log in using the new admin user. You can then proceed and delete the old default user:

Create Connections on Guacamole
You can then add the desired remote connections to Guacamole. This is done by navigating to Settings ->Connection->New Connection

Set the preferred name, protocol and the hostname/IP address and port under the Parameters->Network as shown above. For SSH protocol, you can get the error “ssh handshake failed” if you previously has SSH authentication enabled between the hosts. To solve the error, you need to modify the SSH config on the remote system as shown:
$ sudo vim /etc/ssh/sshd_config
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
Restart the service:
sudo systemctl restart sshd
The added connection should now appear on your Guacamole home as shown here:

To initiate a connection, click on it. If all is okay, the connection should be launched as shown:

You can also use other Authentication Methods as shown here:
To configure SSL check out our article:
Culmination
Get your environment organized and easy to use even for new users in your environment by taking advantage of Apache Guacamole to use its cool features as you will see after installation. Check it out and leverage on its flexibility and convenience especially during this season where most of us will be making memories with the ones we care about.
Other guides that might interest you include:
- Install and Use Guacamole Remote Desktop on CentOS 8
- Easy way to Create SSH tunnels on Linux CLI
- Install and Configure OpenSSH Server on Windows Server 2019
- Set Up Two factor (2FA) Authentication for SSH on CentOS / RHEL 7/8
Hi Admin
Thanks for this post.
In the case i want create more user (more than 2), how to do this.
Many Thanks
Hi Van
I think you can add another authorize block in user-mapping.xml file:
ssh
172.25.169.26
22
rdp
10.10.10.5
3389
tech
true
remmina-ppa-team is dead
Thanks this has been updated to remmina-next-daily
make command errors out. I am getting a VerifyCertificate is deprecated error. Looks like it has to do with freerdp2
I kept hitting this as well, it only worked when I DIDN’T use the custom remmina PPA and just installed freerdp2-dev freerdp2-x11 via apt.
Excellent write up!
Got me going in no time at all.
Awesome!
Thanks Man. Well documented than the Original Guacamole Docs. Am up and running
Awesome!
I Agree.
Josphat should submit this to the official documentation.
Thanks a bunch, great guide that actually works! Even an old swede got it right!
Grant:
The verify certicate error I solved iby adding the ignore errors option. 😀 lol but its working so far.
Thanks for the detailed one. How to make it SSL enabled?
We will try it out and update.
I get this error after doing this:
sudo chmod +x /opt/tomcat/tomcatapp/bin/*.sh
chmod: cannot access ‘/opt/tomcat/tomcatapp/bin/*.sh’: No such file or directory
nevermind, i logged in as root and worked.
Hey badteddy, this has been sorted out in the newly updated guide. Check it out.
Hi when I am at this step:
sudo systemctl start guacd
I get this:
Failed to start guacd.service: Unit guacd.service not found.
Hi, a little late to the post for which I apologise.
Regarding to guacd.service; try setting /etc/guacamole/guacamole.properties to guacd-hostname: 127.0.0.1
and creating a file in /etc/guacamole/guacd.conf
#
# guacd configuration file
#
[daemon]
pid_file = /var/run/guacd.pid
log_level = info
[server]
bind_host = 127.0.0.1
bind_port = 4822
Please also close the firewall to port 4822 in UFW (i.e. IGNORE the request above where it says “sudo ufw allow 4822/tcp”)
Same here :
sudo systemctl start guacd
sudo systemctl enable guacd
doesn’t work. When I do a “ls” command in /etc/init.d there is no guacd file.
Same thing in /guacamole-server-1.3.0/ folder.
I try the full install two times from sratch. Same issues…
Any suggestions please ?
Hey Mick, I can imagine your frustration. Check the updated guide and thanks for the feedback
No matter what, always ending here:
Failed to start guacd.service: Unit guacd.service not found.
Anyway great intro.
Check updated guide Emil. And we appreciate your feedback.
How come this version doesnt allow you to add connections via the web ui?
Username and password do not enter
Make sure the passwords you are keying in are the ones in the echo statement Eu e.g “echo -n StrongPassword | openssl md5”. Password is StrongPassword.
Solution:
In guacamole.properties file, replace user-mapping with basic-user-mapping.
Steps:
1- Open terminal, and run the following command:
sudo vim /etc/guacamole/guacamole.properties
2- Press A on your keyboard, to enter in Edit or Insertion mode.
3- Search user-mapping and replace with basic-user-mapping. Then it will look as follows, for example:
guacd-hostname: localhost
guacd-port: 4822
authprovider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider
basic-user-mapping: /etc/guacamole/user-mapping.xml
4- Press Escape on your keyboard and write “:wq” (without quotes).
5- Press Enter to save and then exit.
6- Restart Tomcat and Guacamole, with the following command :
sudo systemctl restart tomcat guacd
Now try to login with your user and password !
http://127.0.0.1:8080/guacamole
Note here is an example of user-mapping.xml, (not for copy just for help you) :
ssh
127.0.0.1
22
Solution:
In guacamole.properties file, replace user-mapping with basic-user-mapping.
Steps:
1- Open terminal, and run the following command:
sudo vim /etc/guacamole/guacamole.properties
2- Press A on your keyboard, to enter in Edit or Insertion mode.
3- Search user-mapping and replace with basic-user-mapping. Then it will look as follows, for example:
guacd-hostname: localhost
guacd-port: 4822
authprovider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider
basic-user-mapping: /etc/guacamole/user-mapping.xml
4- Press Escape on your keyboard and write “:wq” (without quotes).
5- Press Enter to save and then exit.
6- Restart Tomcat and Guacamole, with the following command :
sudo systemctl restart tomcat guacd
Now try to login with your user and password !
http://127.0.0.1:8080/guacamole
Note here is an example of user-mapping.xml, (not for copy just for help you) :
ssh
127.0.0.1
22
Solution, open guacamole.properties (located in /etc/guacamole) with any Text editor (vim, nano, gedit etc). Then replace user-mapping with basic-user-mapping . Save and close the file, then restart tomcat and guacamole with:
sudo systemctl restart tomcat guacd
Now you can login.
God bless you.
Open guacamole.properties file, then replace :
user-mapping to basic-user-mapping
Save the file, restart tomcat and guacd and now you will be able to login.
As of 2/28/2022, Tomcat 9.0.53 is no longer available at the location given in the instructions. The current version is 9.0.59. I made the changes in the commands to load this version, but now Tomcat will not run when I enter:
sudo systemctl enable –now tomcat
I get this error:
Job for tomcat.service failed because the control process exited with error code.
running systemctl status tomcat yields this result:
● tomcat.service – Tomcat 9 servlet container
Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2022-02-28 21:18:44 UTC; 5min ago
Process: 17443 ExecStart=/opt/tomcat/tomcatapp/bin/startup.sh (code=exited, status=0/SUCCESS)
Process: 17452 ExecStop=/opt/tomcat/tomcatapp/bin/shutdown.sh (code=exited, status=1/FAILURE)
Feb 28 21:18:44 ubuntu systemd[1]: Starting Tomcat 9 servlet container…
Feb 28 21:18:44 ubuntu startup.sh[17443]: Tomcat started.
Feb 28 21:18:44 ubuntu systemd[1]: tomcat.service: Control process exited, code=exited, status=1/FAILURE
Feb 28 21:18:44 ubuntu systemd[1]: tomcat.service: Failed with result ‘exit-code’.
Feb 28 21:18:44 ubuntu shutdown.sh[17452]: PID file found but either no matching process was found or the current user does not have>
Feb 28 21:18:44 ubuntu systemd[1]: Failed to start Tomcat 9 servlet container.
Since the version has changed, is there a change in dependencies that need to be addressed?
Check out updated guide Mark. We hope it will help you set it up now.
Hi, thanks for this.
You should never expose Port 4822 using UFW. You shouldn’t need to firewall rule at all.
“Keep in mind that port 4822 only needs to be accessible by the web application. You should not expose it publicly”
Thank You Bobby. This has been rectified..
How do I create or access the “Super User” that can add new users and groups etc in the GUI like the default “guacadmin” user in their documents. Seems like I cannot login with the guacadmin username if I follow these steps?
User mapping is done in /etc/guacamole/user-mapping.xml file
I think you need to use a different auth method like SQL, the default user-mapping doesn’t do it.
Hi Vexctor, we will look into covering this with Postgres soon. Thank you!
This is a great doc, nice and easy to follow with just enough meat (how, why, and where) in the middle to satisfy my need to understand, thanks!
Need an LDAP auth guide like this!
Thanks for the comment Vextor.
I followed this guide and everything looks alright. Services are running.
But, after logging in and trying to connect to a server i get
“An internal error has occurred within the Guacamole server, and the connection has been terminated. If the problem persists, please notify your system administrator, or check your system logs.”
There are no errors in syslog.
+1 any solution to this?
See updated article
/etc/guacamole/guacd.conf
section. The restart the service.+1; appart from this – thanks for the well structured tutorial 🙂
See updated article
/etc/guacamole/guacd.conf
section. The restart the service.The make pert is failing:
CCLD libguac_common.la
make[3]: Leaving directory ‘/home/chris/guacamole-server-1.4.0/src/common’
Making all in tests
make[3]: Entering directory ‘/home/chris/guacamole-server-1.4.0/src/common/tests’
make[3]: Nothing to be done for ‘all’.
make[3]: Leaving directory ‘/home/chris/guacamole-server-1.4.0/src/common/tests’
make[2]: Leaving directory ‘/home/chris/guacamole-server-1.4.0/src/common’
Making all in src/common-ssh
make[2]: Entering directory ‘/home/chris/guacamole-server-1.4.0/src/common-ssh’
Making all in .
make[3]: Entering directory ‘/home/chris/guacamole-server-1.4.0/src/common-ssh’
CC libguac_common_ssh_la-buffer.lo
CC libguac_common_ssh_la-dsa-compat.lo
CC libguac_common_ssh_la-rsa-compat.lo
CC libguac_common_ssh_la-sftp.lo
CC libguac_common_ssh_la-ssh.lo
CC libguac_common_ssh_la-key.lo
key.c: In function ‘guac_common_ssh_key_alloc’:
key.c:63:9: error: ‘PEM_read_bio_RSAPrivateKey’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
63 | rsa_key = PEM_read_bio_RSAPrivateKey(key_bio, NULL, NULL, passphrase);
| ^~~~~~~
In file included from key.c:33:
/usr/include/openssl/pem.h:447:1: note: declared here
447 | DECLARE_PEM_rw_cb_attr(OSSL_DEPRECATEDIN_3_0, RSAPrivateKey, RSA)
| ^~~~~~~~~~~~~~~~~~~~~~
key.c:79:9: error: ‘RSA_get0_key’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
79 | RSA_get0_key(rsa_key, &key_n, &key_e, NULL);
| ^~~~~~~~~~~~
In file included from common-ssh/rsa-compat.h:26,
from key.c:25:
/usr/include/openssl/rsa.h:217:28: note: declared here
217 | OSSL_DEPRECATEDIN_3_0 void RSA_get0_key(const RSA *r,
| ^~~~~~~~~~~~
key.c:105:9: error: ‘PEM_read_bio_DSAPrivateKey’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
105 | dsa_key = PEM_read_bio_DSAPrivateKey(key_bio, NULL, NULL, passphrase);
| ^~~~~~~
In file included from key.c:33:
/usr/include/openssl/pem.h:453:1: note: declared here
453 | DECLARE_PEM_rw_cb_attr(OSSL_DEPRECATEDIN_3_0, DSAPrivateKey, DSA)
| ^~~~~~~~~~~~~~~~~~~~~~
key.c:121:9: error: ‘DSA_get0_pqg’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
121 | DSA_get0_pqg(dsa_key, &key_p, &key_q, &key_g);
| ^~~~~~~~~~~~
In file included from common-ssh/dsa-compat.h:26,
from key.c:23:
/usr/include/openssl/dsa.h:201:28: note: declared here
201 | OSSL_DEPRECATEDIN_3_0 void DSA_get0_pqg(const DSA *d, const BIGNUM **p,
| ^~~~~~~~~~~~
key.c:122:9: error: ‘DSA_get0_key’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
122 | DSA_get0_key(dsa_key, &pub_key, NULL);
| ^~~~~~~~~~~~
In file included from common-ssh/dsa-compat.h:26,
from key.c:23:
/usr/include/openssl/dsa.h:204:28: note: declared here
204 | OSSL_DEPRECATEDIN_3_0 void DSA_get0_key(const DSA *d, const BIGNUM **pub_key,
| ^~~~~~~~~~~~
key.c: In function ‘guac_common_ssh_key_free’:
key.c:164:9: error: ‘RSA_free’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
164 | RSA_free(key->rsa);
| ^~~~~~~~
In file included from common-ssh/rsa-compat.h:26,
from key.c:25:
/usr/include/openssl/rsa.h:293:28: note: declared here
293 | OSSL_DEPRECATEDIN_3_0 void RSA_free(RSA *r);
| ^~~~~~~~
key.c:166:9: error: ‘DSA_free’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
166 | DSA_free(key->dsa);
| ^~~~~~~~
In file included from common-ssh/dsa-compat.h:26,
from key.c:23:
/usr/include/openssl/dsa.h:127:28: note: declared here
127 | OSSL_DEPRECATEDIN_3_0 void DSA_free(DSA *r);
| ^~~~~~~~
key.c: In function ‘guac_common_ssh_key_sign’:
key.c:202:13: error: ‘RSA_sign’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
202 | if (RSA_sign(NID_sha1, digest, dlen, sig, &len, key->rsa) == 1)
| ^~
In file included from common-ssh/rsa-compat.h:26,
from key.c:25:
/usr/include/openssl/rsa.h:348:27: note: declared here
348 | OSSL_DEPRECATEDIN_3_0 int RSA_sign(int type, const unsigned char *m,
| ^~~~~~~~
key.c:208:13: error: ‘DSA_do_sign’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]
208 | DSA_SIG* dsa_sig = DSA_do_sign(digest, dlen, key->dsa);
| ^~~~~~~
In file included from common-ssh/dsa-compat.h:26,
from key.c:23:
/usr/include/openssl/dsa.h:113:32: note: declared here
113 | OSSL_DEPRECATEDIN_3_0 DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen,
| ^~~~~~~~~~~
cc1: all warnings being treated as errors
make[3]: *** [Makefile:590: libguac_common_ssh_la-key.lo] Error 1
make[3]: Leaving directory ‘/home/chris/guacamole-server-1.4.0/src/common-ssh’
make[2]: *** [Makefile:616: all-recursive] Error 1
make[2]: Leaving directory ‘/home/chris/guacamole-server-1.4.0/src/common-ssh’
make[1]: *** [Makefile:536: all-recursive] Error 1
make[1]: Leaving directory ‘/home/chris/guacamole-server-1.4.0’
make: *** [Makefile:458: all] Error 2
We are checking this out Christian. Thanks for your awesome feedback..
Hi John
I get the following error after….
$sudo systemctl enable –now tomcat
Failed to enable unit: “multi-user.targetWantedBy=multi-user.target” is not a valid unit name.
can you please tell me what im doing wrong? new to vim, prefer nano.
Hi John
got past the systemd file problem,was a typo in VIM… now not able to start guacd after $make
see these errors after executing $make
cc1: all warnings being treated as errors
make[3]: *** [Makefile:590: libguac_common_ssh_la-key.lo] Error 1
make[3]: Leaving directory ‘/home/pauls/guacamole-server-1.4.0/src/common-ssh’
make[2]: *** [Makefile:616: all-recursive] Error 1
make[2]: Leaving directory ‘/home/pauls/guacamole-server-1.4.0/src/common-ssh’
make[1]: *** [Makefile:536: all-recursive] Error 1
make[1]: Leaving directory ‘/home/pauls/guacamole-server-1.4.0’
make: *** [Makefile:458: all] Error 2
help pl;ease
Hi Kibet
guacamole directory not found (404)
root@$:/opt/tomcat/tomcatapp# ls /opt/tomcat/tomcatapp/.guacamole
guacamole.properties guacamole.war user-mapping.xml
root@$:/opt/tomcat/tomcatapp#
Any idea?
Check if you missed a step in the guide.
thanks for an article, it helped me a lot
Glad to hear. Thanks!
Guide works perfect for the installation (I just changed Guacamole server and client versions in the guide from 1.4.0 to 1.5.0.)
However, when i log in with one of the users from the xml file, they are not admins. Is there an option to specify admin users? How am I supposed to use the GUI to add more servers with these read-only users?
Great thanks for updates on new release we updated the guide as well to reflect the same.
Does this support websocket connection, I noticed libwebsocket was omitted (“No”). Otherwise Guacamole will fall back to http polling which is slower/more traffic.
Works well with a connection to a Linux box, but not so much with Windows
I get the following error :
RDP server closed/refused connection: Security negotiation failed (wrong security type?
I read this article: https://kifarunix.com/install-guacamole-on-debian-11/#fix-rdp-security-negotiation-failed
But this step : sed -i ‘s/daemon/guacd/’ /etc/systemd/system/guacd.service
Doesn’t work, as it can’t find the service.
Any suggestion ?
Tks
Works well with a connection to a Linux box, but not so much with Windows
I get the following error :
server closed/refused connection: Security negotiation failed (wrong security type?
I read this article: https://kifarunix.com/install-guacamole-on-debian-11/#fix-rdp-security-negotiation-failed
But this step : sed -i ‘s/daemon/guacd/’ /etc/systemd/system/guacd.service
Doesn’t work, as it can’t find the service.
Any suggestion ?
Tks
Save days of pain and drama and check out this new automated menu driven Gucamole installer recently released that suppports the latest 1.5.1.
It also allows you to add an Nginx proxy layer in front as well as adding self signed SSL or Lets Encrypt SSL for a public facing deployment. Database backups, email alerts and Active Directory, OTP, Duo 2FA , even remote SQL database are all install options too.
There is also an upgrade script for earier versions.
https://github.com/itiligent/Guacamole-Setup
Thanks for your insights.
Thanks for the guide, works well. But how do i get the admin panel ?this doesnt show the full menu , which you can see in https://hub.docker.com/r/jwetzell/guacamole
Hey Sam, you need to use a different authentication method, either mysql or mariadb. You can follow the steps in this article for basic instructions, although the article uses old versions of guacamole and sql connector, so you will need to modify the instructions to use the latest versions
https://www.linode.com/docs/guides/installing-apache-guacamole-on-ubuntu-and-debian/
A FAR easier way is to use this up to date menu driven installer project:
https://github.com/itiligent/Guacamole-Setup
In 3 minutes you’ll have Guacamole, a front end Nginx proxy with SSL (public with LetsEncrypt or private self signed) , mutli-factor auth and even Active Directory intergration with database backup tasks and MSO365 email alerting all built from latest source.
Great article Kibet! Really simplified my installation. I’d recommend changing the user authentication in the article to use mysql or mariadb to allow superuser access. You can copy inspiration from this article
https://www.linode.com/docs/guides/installing-apache-guacamole-on-ubuntu-and-debian/