apt update
apt install -y docker.io docker-compose
systemctl enable docker
systemctl start docker
docker --version
docker-compose --version
mkdir -p /opt/guacamole
cd /opt/guacamole
docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > initdb.sql
Cette commande télécharge l'image officielle Guacamole et génère le fichier SQL contenant la structure de la base de données ainsi que le compte administrateur par défaut.
nano docker-compose.yml
version: '3'
services:
guacamole-db:
image: mysql:8.0
container_name: guacamole-mysql
environment:
MYSQL_ROOT_PASSWORD: guacamole_root_password
MYSQL_DATABASE: guacamole_db
MYSQL_USER: guacamole_user
MYSQL_PASSWORD: guacamole_password
volumes:
- ./initdb.sql:/docker-entrypoint-initdb.d/initdb.sql
- guacamole-db-data:/var/lib/mysql
restart: unless-stopped
guacd:
image: guacamole/guacd
container_name: guacd
restart: unless-stopped
guacamole:
image: guacamole/guacamole
container_name: guacamole
environment:
GUACD_HOSTNAME: guacd
MYSQL_HOSTNAME: guacamole-db
MYSQL_DATABASE: guacamole_db
MYSQL_USER: guacamole_user
MYSQL_PASSWORD: guacamole_password
ports:
- "8080:8080"
depends_on:
- guacd
- guacamole-db
restart: unless-stopped
volumes:
guacamole-db-data:
guacamole-db-data permet la persistance des données de la base de donnéesdocker-compose up -d
initdb.sqldocker ps
guacamole, guacd et guacamole-mysql.cd /opt/guacamole
docker-compose stop
cd /opt/guacamole
docker-compose start
cd /opt/guacamole
docker-compose restart
docker logs guacamole
docker logs guacd
docker logs guacamole-mysql
cd /opt/guacamole
docker-compose pull
docker-compose up -d
docker exec guacamole-mysql mysqldump -u guacamole_user -pguacamole_password guacamole_db > backup_guacamole.sql
docker exec -i guacamole-mysql mysql -u guacamole_user -pguacamole_password guacamole_db < backup_guacamole.sql
guacadminguacadminapt install -y openssh-server
systemctl enable ssh
systemctl start ssh
systemctl status ssh
Le service doit être actif (running).
root est désactivée pour des raisons de sécurité. Si vous souhaitez vous connecter en root via Guacamole, modifiez le fichier de configuration SSH :
nano /etc/ssh/sshd_config
#PermitRootLogin prohibit-password et décommenter làprohibit-password par yesNote de sécurité : Dans un environnement de production, il est recommandé de créer un utilisateur dédié plutôt que d'autoriser la connexion root directe. Cette configuration est acceptable dans un environnement de test.
Sur le serveur Guacamole :
mkdir -p /etc/guacamole/keys
chmod 700 /etc/guacamole/keys
ssh-keygen -t rsa -b 4096 -f /etc/guacamole/keys/guac_rsa -N ""
chmod 600 /etc/guacamole/keys/guac_rsa
chmod 644 /etc/guacamole/keys/guac_rsa.pub
chown root:root /etc/guacamole/keys/guac_rsa
/etc/guacamole/keys/guac_rsa → clé privée (reste sur le serveur Guacamole, ne bouge jamais)/etc/guacamole/keys/guac_rsa.pub → clé publique (à déposer sur chaque serveur Linux cible)Depuis le serveur Guacamole, exécuter la commande suivante pour chaque serveur cible (remplacer utilisateur@ip-serveur-cible) :
cat /etc/guacamole/keys/guac_rsa.pub | ssh utilisateur@ip-serveur-cible \
"mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Exemple pour le serveur DHCP :
cat /etc/guacamole/keys/guac_rsa.pub | ssh cedric@172.30.99.10 \
"mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
cat /etc/guacamole/keys/guac_rsa
Sur le serveur AD CS :
certsrv.mscRDP-OrdinateurOrdinateurs du domaine → droits : Lire + Inscrire + Inscription automatiqueContrôleurs de domaine → mêmes droits1.3.6.1.4.1.311.54.1.2)Retour dans certsrv.msc :
RDP-Ordinateur → OKDans gpmc.msc, créer ou modifier une GPO liée à l'OU des machines Windows :
Configuration ordinateur
→ Paramètres Windows
→ Paramètres de sécurité
→ Stratégies de clé publique
→ Client des services de certificats - Inscription automatique
Dans la même GPO, naviguer vers :
Configuration ordinateur
→ Modèles d'administration
→ Composants Windows
→ Services Bureau à distance
→ Hôte de session Bureau à distance
→ Sécurité
RDP-OrdinateurSSL (TLS 1.0)Sur chaque machine Windows :
gpupdate /force
Vérifier l'enrollment du certificat :
certlm.msc
# → Personnel → Certificats
# Un certificat émis par cbaudiment.fr doit être visible
Cette étape est indispensable pour que Guacamole fasse confiance aux certificats RDP signés par l'AD CS.
certsrv.msc → clic droit sur le CA → Propriétés → Certificat CA → Afficher → Détails → Copier dans un fichierkeytool -import -trustcacerts \
-alias "CA-cbaudiment" \
-file /tmp/ca-cbaudiment.cer \
-keystore /etc/guacamole/truststore.jks \
-storepass changeit
guacamole.properties :
echo "ssl-truststore: /etc/guacamole/truststore.jks" >> /etc/guacamole/guacamole.properties
echo "ssl-truststore-password: changeit" >> /etc/guacamole/guacamole.properties
systemctl restart tomcat9 guacd
| Symptôme | Cause probable | Solution |
|---|---|---|
| Connexion SSH refusée dans Guacamole | Clé privée mal collée ou retours à la ligne manquants | Recopier le contenu de guac_rsa en incluant les lignes -----BEGIN----- et -----END----- |
| Clé publique non reconnue sur le serveur cible | Permissions incorrectes sur ~/.ssh ou authorized_keys |
Vérifier chmod 700 ~/.ssh et chmod 600 ~/.ssh/authorized_keys sur le serveur cible |
| Avertissement de certificat RDP persistant | GPO non appliquée ou template non publié | Exécuter gpupdate /force et vérifier dans certlm.msc que le certificat RDP-Ordinateur est présent |
CERTSRV_E_TEMPLATE_DENIED lors de l'enrollment |
"Contrôleurs de domaine" absent des permissions du template | Ouvrir le template dans certsrv.msc → onglet Sécurité → ajouter Contrôleurs de domaine avec droits Lire + Inscrire |
| Guacamole rejette la connexion RDP (erreur SSL) | Certificat CA non importé dans le truststore Java | Importer le CA via keytool et redémarrer tomcat9 et guacd |