X11 forwarding via SSH: come usare ssh -X e -Y

Esegui ssh -X user@server, poi avvia un programma grafico come xeyes. La sua finestra si apre sul tuo schermo. Il server ha bisogno di X11Forwarding yes in sshd_config e di xauth installato, e la tua macchina ha bisogno di un server X in esecuzione, che su un Mac significa XQuartz. -Y dà al programma pieno accesso al tuo display, quindi usalo solo con server di cui ti fidi.

Aggiornata il . Client e server OpenSSH 10.0 su Debian 13 in container usa e getta, con Xvfb come display e xeyes, xdpyinfo e xwd come programmi.

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 displayLimitato dall'estensione X11 SECURITYCompleto
Schermata dell'intero display con xwd -rootFallita: unable to get imageRiuscita
Proprietà di un'altra finestra con xpropRiuscitoRiuscito
Limite di tempoNuove finestre rifiutate dopo 20 minutiNessuno

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

MessaggioCausaControllo
X11 forwarding request failed on channel 0X11Forwarding no sul server, oppure lì manca xauth. Li abbiamo ottenuti entrambisudo sshd -T | grep -i x11forwarding e which xauth
Error: Can't open display: senza nulla dopoDISPLAY è vuoto, quindi l'inoltro è spentoecho $DISPLAY su entrambi i lati, e ssh -v
Warning: untrusted X11 forwarding setup failed: xauth key data not generatedNessun xauth sulla tua macchinawhich 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

Altro in Sessioni e tmux

Tutte le guide