A remote desktop gateway from the Apache Software Foundation: RDP, SSH and VNC sessions in the browser, signed in through your directory, recorded and played back where you keep them. Pilae runs it on your own servers, or in Zurich, Switzerland, and eleven other Pilae Cloud regions.
- Licence
- Apache-2.0
- Runs on
- Your own hardware, or any of 10+ Pilae regions — six of them in Switzerland and the EU
- Upgrades
- Pinned, tested against your configuration, applied in your window
- Upstream
- guacamole.apache.org
Running Apache Guacamole in production: what it takes
Place guacd beside the machines it reaches
guacd, the web app and PostgreSQL run from the upstream images, pinned to a release we have run. guacd sits on the private network next to the machines it opens sessions to, and a site of your own can have its own guacd, since each connection can name the guacd it goes through. Port 4822 accepts the web app and nothing else.
Sign-on through Keycloak, permissions by group
The OpenID Connect extension signs people in through Keycloak, whose client is set up for the implicit flow Guacamole uses. Group names arrive in the groups claim and match Guacamole user groups that hold the connection permissions, so someone removed from a group in the directory loses its connections at their next sign-in. SAML works the same way for an identity provider that only speaks SAML.
Pin host keys and certificates
Guacamole checks no SSH host identity unless it is given one, so every SSH connection carries its host key, and RDP connections carry the certificate fingerprints of their servers rather than ignoring certificates. TLS ends at a proxy in front of Tomcat, whose RemoteIpValve trusts that proxy alone, so the history and the brute-force ban record the address of each person and not of the proxy.
Record per connection, play back in the browser
Recordings are written to a directory named after each history entry, where the history recording storage extension finds them, and the connection history shows a View link beside each recorded session. Key events are recorded only where you ask for them, because they capture everything typed. Recordings older than your retention period are deleted on a schedule.
Back up, restore, then upgrade in your window
The database and the recordings go offsite daily, encrypted, to your chosen country. Once a month we restore both into a scratch environment, open a connection and play a recording from the copy. Restarting the web app or guacd ends every open session, so each upgrade, with the database scripts the release ships, is tested on a copy by the Pilae Agent and applied in your window once you approve.
What Apache Guacamole is, and who runs it
Self-hosted Apache Guacamole for browser access to RDP, SSH and VNC
Apache Guacamole is a remote desktop gateway from the Apache Software Foundation. People open a browser, sign in and pick a connection, and a Windows server, a Linux shell or a desktop appears in the tab, with no client to install. It has two parts. guacd, the proxy daemon, speaks RDP, SSH, VNC, Telnet and Kubernetes to the machines behind it. The Java web application handles sign-in and permissions and draws each session in the browser. Users, connections and history sit in a database through the JDBC authentication extension, here PostgreSQL.
It suits teams that administer servers and desktops across several sites and have to show who opened which session and what happened in it. Guacamole belongs beside the machines it reaches, so that is where we put it: on your own hardware, or in the Pilae Cloud region that holds them, one of 10+, six of them in Switzerland and the EU.
Apache Guacamole in production: sign-on, recordings and guacd
Guacamole answers only on your private network, and the machines behind it accept RDP, SSH and VNC from guacd and nowhere else. guacd authenticates no one, so its port is open to the web application alone. Sign-on goes through Keycloak with OpenID Connect or SAML, and the groups in the token match Guacamole user groups that hold the permissions.
Recording is a setting on each connection: a graphical recording for every protocol, and a typescript of the text for SSH, Telnet and Kubernetes. Graphical recordings play back in the browser from the connection history. Typescripts are kept beside them and replay with scriptreplay. Recordings and the database are backed up daily, encrypted, to an offsite location in your chosen country, and our monitoring probes the web app and guacd every 60 seconds. A restart ends every open session, so the Pilae Agent applies upgrades only in your window, after you approve them.
Apache Guacamole licence and editions
Guacamole is Apache-2.0, and nothing is held back for a paid edition: sign-on, TOTP, connection restrictions and recording playback are extensions published with the release, and the connection import is part of the web application. There is no seat count to track and no licence to hold in your name. We operate the Apache release, on infrastructure you choose, and our operation follows the published plans. Talk to us about the machines you reach through TeamViewer today.
Apache Guacamole system requirements
Before anything is deployed, this is what has to exist. We size it with you in the first session, and we say so when your own hardware is already enough.
- CPU and memory
- 4 vCPU · 8 GBOur starting point for guacd, the web app and PostgreSQL on one machine. guacd does the work: it holds every RDP, SSH and VNC session open and encodes the screen for the browser, so it grows with the sessions open at once rather than with the number of users.
- Database
- PostgreSQL · guacamole-auth-jdbcHolds users, groups, connections, permissions and the connection history. Guacamole does not create its own tables: the schema scripts ship with the extension and run once, and the guacadmin account they create, with the password guacadmin, is replaced before anyone else signs in.
- Proxy daemon
- guacamole/guacd · TCP 4822guacd authenticates no one, and upstream warns that an exposed guacd is a jumping point to other systems. Ours accepts connections from the web app alone, over the private network.
- Recordings
- Shared volume · mode 2750guacd writes the recordings and the web app reads them for playback, so both mount the same directory, owned by the guacd user and readable by the group the web app runs as, with the setgid bit so new recordings keep that group. It is sized for the retention period you set.
- Target machines
- RDP 3389 · SSH 22 · VNC 5900Open to the guacd address only. Windows needs Remote Desktop turned on, which Home editions cannot accept. Nothing from Guacamole is installed on any of them.
- DNS and TLS
- 1 private hostnameFor example remote.acme.internal, resolved on the private network only. The OpenID Connect redirect URI is the address people type, so it is chosen once.
Migrating from TeamViewer to Apache Guacamole
TeamViewer puts an agent on every machine and brokers each session through its own servers. Guacamole installs nothing on the machines it reaches: guacd opens RDP, SSH or VNC to them over your private network, and the browser draws the session. So what moves is a list of machines, the protocol each one speaks and the groups allowed to open it, written as one import file. What does not come across is attended support for a laptop outside your network. Guacamole reaches only what guacd can route to, so helping someone on their home connection stays a job for a support tool. Unattended access to servers and office desktops is the part that moves.
List the machines still in use
With the owners, we go through the TeamViewer device list and keep the machines people still open, with the directory groups who use each one. The rest are retired with the subscription instead of being carried across.
Switch on the native protocol
Windows servers and Pro or Enterprise desktops get Remote Desktop with Network Level Authentication, Linux servers already run SSH, and desktops whose screen someone must see get a VNC server. Each accepts those ports from guacd alone. Windows Home machines cannot accept Remote Desktop and are listed first.
Import connections and permissions
Connection groups are created first, because the import places connections in groups that already exist. The connections, with the directory groups allowed to use each one, then go into one CSV, JSON or YAML file, loaded through the Import button in the web app. User groups named in the file that do not exist yet are created. Each owner opens their connections once before anyone else moves.
Uninstall TeamViewer machine by machine
Once a machine has been reached through Guacamole by its usual people for a full working week, the TeamViewer client comes off it and the device leaves the account. The subscription ends with the last machine.
Who reaches what through Guacamole
| Windows servers | RDP, NLA | dc1, dc2 and files1.acme.internal | ops-windows | Screen | Security key, in Keycloak |
| Linux servers | SSH, host key pinned | db1, db2 and git1.acme.internal | ops-linux | Screen and typescript | Security key, in Keycloak |
| Plant HMIs | VNC | hmi-line1 and hmi-line2.acme.internal | plant-engineering | Screen and keys | Authenticator app, in Keycloak |
| ERP vendor | RDP, NLA | erp-app1.acme.internal | vendor-erp, weekdays 08:00–18:00 | Screen and keys | Authenticator app, in Keycloak |
| Finance desktops | RDP, NLA | fin-desk1 to fin-desk8.acme.internal | finance | Off | Authenticator app, in Keycloak |
What Pilae is responsible for
A pinned version
A version we have run, not whatever latest resolves to that day.
A runbook
What it depends on, how it fails, what to do about it. In your repository.
A restore drill
Backups restored on a schedule. A backup nobody has restored is a file.
A patch window
Security updates in a window you agreed, with a rollback ready.
Someone watching
Every endpoint probed on the minute. An alert reaches a person, not a dashboard nobody opens.
- Where it runs
- zur1, fra1, fal1, gra1, ams1, hel1, lon1, ash1, hil1, sin1, tok1, syd1, on-premZurich, Frankfurt, Falkenstein, Gravelines, Amsterdam, Helsinki, London, Ashburn, Hillsboro, Singapore, Tokyo, Sydney, Your own hardware
- Who holds the credentials
- You do. Ours are separate, named, logged and revocable with one command. We ask before anything changes outside an agreed window.
- If you leave
- The machine, the data, the compose files and the runbook are already yours. Nothing stops when our access does.
What running Apache Guacamole costs
On Starter, Apache Guacamole runs in Pilae Cloud for CHF 449EUR 479USD 559 a month, hosting and onboarding included. On Business, it is one of up to three apps for CHF 1,590EUR 1,690USD 1,990 a month, on your own servers or in Pilae Cloud. Enterprise is quoted. The plans set what each includes; these are the inputs that move the price around them.
- Instance size
- The CPU, memory and, where a model runs, the GPUs the app needs for your users and your data.
- High availability
- One machine with tested restores, or a replicated setup that keeps serving when a node fails.
- Storage and backups
- How much data it holds, how long backups are kept, and point-in-time recovery for its database.
- Plan and support
- Starter, Business or Enterprise: support hours, response times in the contract and how often we review the service with you.
- Region
- Your own hardware, where the infrastructure is already yours, or a Pilae Cloud region, where machines are priced per month. On Starter, Pilae chooses the site.
- Sign-on and integrations
- Single sign-on, directory sync, mail relays and the other systems the app has to reach.
Apache Guacamole: common questions
Is Apache Guacamole open source?
Does anything have to be installed on the machines we connect to?
Can we keep Duo, or the second factor we already use?
Who can watch a session recording, and how long is it kept?
Where are the passwords for the target machines kept?
Also in engineering and security
Forgejo
Git hosting, code review, issues, packages and CI in one service, run in Switzerland, the EU or your own datacentre, with CI runners on machines of their own.
Replaces GitHub, GitLab.com, Bitbucket
GitLab
Git repositories, merge requests, CI/CD pipelines and registries in one application, run on your own hardware or in regions you choose, with runners on machines you place.
Replaces GitHub Enterprise Cloud, GitLab.com, Azure DevOps
Harbor
A private container registry that scans and replicates your images and caches Docker Hub, run in Switzerland, the EU or your own datacentre.
Replaces Docker Hub, Amazon ECR, Azure Container Registry
Bring us your Apache Guacamole. We will tell you what it takes.
Thirty minutes on the deployment you already have, or the one you are about to start.