Preparare il server
Installa xauth, più un piccolo programma per provare:
sudo apt install xauth x11-apps
In /etc/ssh/sshd_config, imposta:
X11Forwarding yes
Il valore predefinito di OpenSSH è no, anche se il file di configurazione di Debian lo imposta a yes. Dopo una modifica, ricarica:
sudo sshd -t && sudo systemctl reload ssh
Su alcuni sistemi il servizio si chiama sshd.
Collegarsi e provare
ssh -X user@server
echo $DISPLAY
xeyes
DISPLAY dovrebbe somigliare a localhost:10.0. È il proxy che sshd crea sul server, non il tuo display vero. Non impostare DISPLAY a mano.
Per renderlo permanente per un server, usa ~/.ssh/config:
Host server
ForwardX11 yes
-X o -Y
-X, non fidato | -Y, fidato | |
|---|---|---|
| Accesso al tuo display | Limitato dall'estensione X11 SECURITY | Completo |
Schermata dell'intero display con xwd -root | Fallita: unable to get image | Riuscita |
Proprietà di un'altra finestra con xprop | Riuscito | Riuscito |
| Limite di tempo | Nuove finestre rifiutate dopo 20 minuti | Nessuno |
Il non fidato è il comportamento predefinito originale di -X. Questi risultati vengono dal nostro test su Xvfb con l'autenticazione X attiva. Senza autenticazione, -X non limitava nulla. Quindi -X riduce ciò che un programma può raggiungere, ma non lo isola. Alcuni programmi perdono funzioni in questa modalità: xeyes ha stampato extension "XInputExtension" missing e si è aperto comunque.
Se con -X le finestre smettono di aprirsi dopo 20 minuti, con Can't open display, alza il limite in ~/.ssh/config, per esempio ForwardX11Timeout 8h.
Su Debian e Ubuntu, -X si comporta come -Y
Il client di Debian imposta ForwardX11Trusted yes per impostazione predefinita, quindi lì -X è fidato. Nel nostro test ssh -G mostrava yes su Debian 13 e no su macOS. Per la modalità più rigorosa su Debian, aggiungi -o ForwardX11Trusted=no, ed è così che abbiamo eseguito la prova non fidata. Vedi cosa fa il tuo client con:
ssh -G server | grep -i forwardx11
Il rischio per la sicurezza
Con l'inoltro fidato, un programma sul server può catturare il tuo schermo e leggere i tasti che digiti in altre finestre. Lo stesso vale per chiunque sul server riesca ad aggirare i permessi dei file, come root, perché può raggiungere lo stesso display inoltrato. Non inoltrare X11 a un server di cui non ti fidi. Usa -Y solo quando un programma fallisce con -X.
L'inoltro dell'agent SSH comporta un rischio simile per le tue chiavi: vedi i rischi dell'agent forwarding SSH.
Su un Mac: XQuartz
macOS non ha un server X. Installa XQuartz, poi esci e rientra dalla sessione perché DISPLAY venga impostato. Su Debian abbiamo confermato cosa succede con un DISPLAY vuoto: se echo $DISPLAY è vuoto, ssh -X si collega senza inoltro e senza alcun errore visibile. Solo ssh -v ti dice X11 forwarding requested but DISPLAY not set.
Il client di macOS cerca xauth in /usr/X11R6/bin/xauth per impostazione predefinita. Se si lamenta, puntalo a quello di XQuartz, che di norma si installa sotto /opt/X11, in ~/.ssh/config:
Host *
XAuthLocation /opt/X11/bin/xauth
Errori
| Messaggio | Causa | Controllo |
|---|---|---|
X11 forwarding request failed on channel 0 | X11Forwarding no sul server, oppure lì manca xauth. Li abbiamo ottenuti entrambi | sudo sshd -T | grep -i x11forwarding e which xauth |
Error: Can't open display: senza nulla dopo | DISPLAY è vuoto, quindi l'inoltro è spento | echo $DISPLAY su entrambi i lati, e ssh -v |
Warning: untrusted X11 forwarding setup failed: xauth key data not generated | Nessun xauth sulla tua macchina | which xauth, poi imposta XAuthLocation |
Domande
Che differenza c'è tra ssh -X e ssh -Y?
-X è l'inoltro non fidato, limitato dall'estensione X11 SECURITY. -Y è fidato e dà al programma pieno accesso al tuo display. Su Debian e Ubuntu, -X è fidato per impostazione predefinita.
Perché ssh -X si collega ma non si apre nessuna finestra?
L'inoltro non è partito. O DISPLAY è vuoto sul tuo computer, o il server ha X11Forwarding no oppure non ha xauth. ssh -v ti dice quale.
Su Mac serve XQuartz?
Sì. macOS non ha un server X. Installa XQuartz, poi esci e rientra nella sessione prima di usare ssh -X.
L'X11 forwarding funziona con Wayland?
Sì, tramite XWayland, che gira sulla maggior parte dei desktop Wayland. Se echo $DISPLAY mostra un valore come :0 sul tuo computer, ssh -X funziona come sempre e i programmi si aprono come finestre X11.
Perché l'X11 forwarding è così lento?
X11 fa molti scambi avanti e indietro tra il programma e il tuo schermo, quindi conta più la latenza della rete che la banda. ssh -C comprime il traffico e aiuta sulle connessioni lente. Per un desktop intero via internet, VNC o RDP attraverso un tunnel SSH di solito è più fluido.
Fonti
- ssh(1), manuale OpenBSD
- ssh_config(5), manuale OpenBSD
- sshd_config(5), manuale OpenBSD
- ssh_config(5), Debian 13
- XQuartz