Apache Guacamole : accès distant sans client, depuis un navigateur
Apache Guacamole est une passerelle d'accès distant "clientless" : elle retransmet du RDP, du VNC ou du SSH directement dans le navigateur via HTML5, sans rien installer côté poste client. C'est l'outil que j'utilise pour dépanner des postes clients à distance ou administrer mes serveurs depuis n'importe où, sans dépendre d'un logiciel spécifique installé sur chaque machine.
1. Architecture
Guacamole repose sur trois conteneurs : guacd (le moteur qui traduit RDP/VNC/SSH vers le protocole web), une base de données pour l'authentification et les connexions enregistrées, et l'application web elle-même (Tomcat).
2. Générer le schéma SQL avant le premier démarrage
C'est l'étape la plus souvent oubliée : contrairement à beaucoup d'applications Docker, Guacamole ne crée pas son schéma de base automatiquement. Il faut le générer à part et le déposer dans un dossier d'initialisation :
$ mkdir -p guacamole/{init,drive,record,mysql-data}
$ docker run --rm guacamole/guacamole:1.6.0 \
/opt/guacamole/bin/initdb.sh --mysql \
> guacamole/init/initdb.sql
initdb.sql doit exister avant le tout premier docker compose up. MariaDB n'exécute les scripts d'initialisation que sur un dossier de données vide — si vous l'oubliez, la base démarre vide et il faut supprimer mysql-data pour recommencer proprement.3. docker-compose.yml
services:
guacd:
image: guacamole/guacd:1.6.0
container_name: guacd
restart: unless-stopped
volumes:
- ./drive:/drive
- ./record:/record
guacamole-mysql:
image: mariadb:10.11
container_name: guacamole-mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: change-moi
MYSQL_DATABASE: guacamole_db
MYSQL_USER: guacamole_user
MYSQL_PASSWORD: change-moi-aussi
volumes:
- ./mysql-data:/var/lib/mysql
- ./init:/docker-entrypoint-initdb.d
guacamole:
image: guacamole/guacamole:1.6.0
container_name: guacamole
restart: unless-stopped
environment:
GUACD_HOSTNAME: guacd
MYSQL_HOSTNAME: guacamole-mysql
MYSQL_DATABASE: guacamole_db
MYSQL_USER: guacamole_user
MYSQL_PASSWORD: change-moi-aussi
ports:
- "8082:8080"
depends_on:
- guacd
- guacamole-mysql
4. Lancement et connexion
$ docker compose up -d
Accès sur http://<IP_SERVEUR>:8082/guacamole/ — le /guacamole/ final est obligatoire, la racine / renvoie une 404 par conception. Identifiants par défaut : guacadmin / guacadmin, à changer immédiatement dans Settings → Preferences.
5. Reverse proxy : le point qui bloque le plus souvent
Guacamole utilise WebSocket en continu pour transmettre l'affichage distant. Sans les en-têtes adéquats sur votre reverse proxy, vous obtenez une page blanche après connexion :
| En-tête | Valeur |
| Upgrade | $http_upgrade |
| Connection | $connection_upgrade |
6. Ajouter une connexion
Dans Settings → Connections → New Connection, choisissez le protocole (RDP, VNC ou SSH), renseignez l'hôte, le port et les identifiants. Vous pouvez ensuite partager cette connexion à un utilisateur sans jamais lui communiquer le mot de passe de la machine cible.
Le dossier record/ permet d'activer l'enregistrement vidéo des sessions — utile pour garder une traçabilité des interventions à distance chez un client, avec son accord.
Conclusion
Guacamole demande un peu de rigueur au premier lancement (schéma SQL, en-têtes WebSocket), mais une fois en place c'est une solution d'accès distant très pratique : un simple lien, aucun client à installer, et un contrôle centralisé des accès.