Accedere da remoto a un terminal SSH o a una sessione grafica con VNC/RDP può essere molto utile. In particolare se i device sono molti e se si cambia regolarmente la postazione di lavoro. Guacamole è una delle soluzioni open source sul mercato. Purtroppo non c’è un singolo container docker da installare e non è facile trovare una guida completa per l’installazione dall’inizio alla fine.
Qui sotto ho creato una piccola guida per l’installazione di Guacamole con un database mysql per la gestione degli utente e l’integrazione con Traefik per avere un collegamento https.
Requisiti#
- Installazione funzionante di Traefik e relativi certificati per https (vedi esempio di base)
- Accesso con SSH alla macchina dove è installato
docker
Procedura per l’installazione#
Database mysql#
- Generare il file di inizializzazione per il database mysql (potrebbe servire sudo)
docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > initdb.sql
Il file generato deve essere passato (collegato come volume) al database per importare la struttura necessaria per Guacamole
Lanciare e creare il container del database (potrebbe servire sudo)
docker-compose up -d guacamole-db
Guacamole#
- Creare i due container di Guacamole lanciando il seguente comando (potrebbe servire sudo). Viste le dipendenze dei vari container, verranno creati entrambi.
docker-compose up -d guacamole
Guacamole è funzionante e puoi collegarti all’interfaccia all’indirizzo: https://guacamole.example.com I dati per il primo login sono:
- user: guacadmin
- password: guacadmin
Ti consiglio di duplicare l’account di default e crearne uno nuovo di amministratore. Poi eseguire il login con il nuovo account e cancellare quello di default.
2FA per Guacamole#
Dalla versione 1.3.0 TOTP è integrato nel container docker (PR 471), purtroppo la documentazione non è ancora stata aggiornata.
Quando l’installazione di Guacamole è funzionante è consigliato attivare l’autentificazione a 2 fattori (2FA).
Aggiungere il parametro
TOTP_ENABLED: 'true'
al containerguacamole
. Al primo login verrà presentato il QR per attivare il 2FA e verrà richiesto d’immettere un codice per confermare.
Docker compose#
guacd:
image: guacamole/guacd
container_name: guacd
hostname: guacd
restart: unless-stopped
volumes:
- /volume1/docker/guacamole/guacd/drive:/drive:rw
- /volume1/docker/guacamole/guacd/record:/record:rw
guacamole:
image: guacamole/guacamole
container_name: guacamole
hostname: guacamole
restart: unless-stopped
depends_on:
- guacd
- guacamole-db
environment:
GUACD_HOSTNAME: guacd
MYSQL_HOSTNAME: guacamole-db
MYSQL_DATABASE: guacamole_db
MYSQL_USER: guacamole_user
MYSQL_PASSWORD: ${GUACAMOLE_PASSWORD}
#TOTP_ENABLED: 'true'
links:
- guacd
labels:
- 'traefik.enable=true'
- 'traefik.http.routers.guacamole.rule=Host(`guacamole.${DOMAIN}`)'
- 'traefik.http.routers.guacamole.entrypoints=web-secure'
- 'traefik.http.routers.guacamole.tls=true'
- "traefik.http.routers.guacamole.tls.certresolver=certificato"
- "traefik.http.routers.guacamole.tls.domains[0].main=*.${DOMAIN}"
#- "traefik.http.routers.guacamole.tls.options=myTLSOptions@file"
- "traefik.http.routers.guacamole.service=guacamoleService"
- "traefik.http.routers.guacamole.middlewares=guacamoleMdl"
- "traefik.http.middlewares.guacamoleMdl.addprefix.prefix=/guacamole"
- "traefik.http.services.guacamoleService.loadBalancer.server.port=8080"
guacamole-db:
image: mysql/mysql-server
container_name: guacamole-db
hostname: guacamole-db
environment:
MYSQL_USER: guacamole_user
MYSQL_PASSWORD: ${GUACAMOLE_PASSWORD}
MYSQL_DATABASE: guacamole_db
restart: unless-stopped
volumes:
- ./initdb.sql:/initdb.sql #DB configuration file
- /volume1/docker/guacamole/database:/var/lib/mysql/:rw
Crediti Foto di Steve Buissinne da Pixabay