Comment utiliser le X11 forwarding (redirection X11) via SSH

Lancez ssh -X user@server, puis démarrez un programme graphique comme xeyes. Sa fenêtre s'ouvre sur votre écran. Le serveur a besoin de X11Forwarding yes dans sshd_config et de xauth installé, et votre machine d'un serveur X en marche, ce qui veut dire XQuartz sur un Mac. -Y donne au programme un accès complet à votre affichage : ne l'utilisez qu'avec des serveurs de confiance.

Mis à jour le . Client et serveur OpenSSH 10.0 sur Debian 13 dans des conteneurs jetables, avec Xvfb comme affichage et xeyes, xdpyinfo et xwd comme programmes.

Préparer le serveur

Installez xauth, plus un petit programme pour tester :

sudo apt install xauth x11-apps

Dans /etc/ssh/sshd_config, définissez :

X11Forwarding yes

La valeur par défaut d'OpenSSH est no, bien que le fichier de configuration de Debian la mette à yes. Rechargez après un changement :

sudo sshd -t && sudo systemctl reload ssh

Le service s'appelle sshd sur certains systèmes.

Se connecter et tester

ssh -X user@server
echo $DISPLAY
xeyes

DISPLAY doit ressembler à localhost:10.0. C'est le proxy que sshd crée sur le serveur, pas votre véritable affichage. Ne définissez pas DISPLAY à la main.

Pour le rendre permanent pour un serveur, utilisez ~/.ssh/config :

Host server
  ForwardX11 yes

-X ou -Y

-X, non fiable-Y, fiable
Accès à votre affichageLimité par l'extension X11 SECURITYComplet
Capture d'écran de tout l'affichage avec xwd -rootÉchec : unable to get imageA fonctionné
Propriétés d'une autre fenêtre avec xpropA fonctionnéA fonctionné
Limite de duréeNouvelles fenêtres refusées après 20 minutesAucune

Le mode non fiable est la valeur par défaut amont pour -X. Ces résultats viennent de notre test sur Xvfb avec l'authentification X activée. Sans authentification, -X ne limitait rien. -X réduit donc ce qu'un programme peut atteindre, mais ne l'isole pas. Certains programmes perdent des fonctions dans ce mode : xeyes a affiché extension "XInputExtension" missing et s'est tout de même ouvert.

Si les fenêtres cessent de s'ouvrir après 20 minutes sous -X, avec Can't open display, relevez la limite dans ~/.ssh/config, par exemple avec ForwardX11Timeout 8h.

Sur Debian et Ubuntu, -X se comporte comme -Y

Le client de Debian définit ForwardX11Trusted yes par défaut : -X y est donc fiable. Dans notre test, ssh -G affichait yes sur Debian 13 et no sur macOS. Pour le mode plus strict sur Debian, ajoutez -o ForwardX11Trusted=no, ce qui est la façon dont nous avons fait le test non fiable. Voyez ce que fait votre client avec :

ssh -G server | grep -i forwardx11

Le risque de sécurité

Avec la redirection fiable, un programme du serveur peut capturer votre écran et lire les touches que vous tapez dans d'autres fenêtres. C'est aussi le cas de quiconque peut contourner les permissions de fichiers sur le serveur, comme root, car il peut atteindre le même affichage redirigé. Ne redirigez pas X11 vers un serveur auquel vous ne faites pas confiance. N'utilisez -Y que lorsqu'un programme échoue avec -X.

Le transfert de l'agent SSH présente un risque comparable pour vos clés : voir les risques du transfert d'agent SSH.

Sur un Mac : XQuartz

macOS n'a pas de serveur X. Installez XQuartz, puis fermez la session et rouvrez-la pour que DISPLAY soit défini dans votre session. Sur Debian, nous avons confirmé ce qui se passe avec un DISPLAY vide : si echo $DISPLAY est vide, ssh -X se connecte sans redirection et sans aucune erreur visible. Seul ssh -v vous dit X11 forwarding requested but DISPLAY not set.

Le client macOS cherche xauth à /usr/X11R6/bin/xauth par défaut. S'il s'en plaint, indiquez-lui celui de XQuartz, qui s'installe normalement sous /opt/X11, dans ~/.ssh/config :

Host *
  XAuthLocation /opt/X11/bin/xauth

Erreurs

MessageCauseVérification
X11 forwarding request failed on channel 0X11Forwarding no sur le serveur, ou pas de xauth là-bas. Nous l'avons obtenu pour les deuxsudo sshd -T | grep -i x11forwarding et which xauth
Error: Can't open display: sans rien aprèsDISPLAY est vide, la redirection est donc désactivéeecho $DISPLAY des deux côtés, et ssh -v
Warning: untrusted X11 forwarding setup failed: xauth key data not generatedPas de xauth sur votre machinewhich xauth, puis définissez XAuthLocation

Questions

Quelle différence entre ssh -X et ssh -Y ?

-X est le transfert non fiable, limité par l'extension X11 SECURITY. -Y est fiable et donne au programme un accès complet à votre affichage. Sur Debian et Ubuntu, -X est fiable par défaut.

Pourquoi ssh -X se connecte mais aucune fenêtre ne s'ouvre ?

Le transfert n'a pas démarré. Soit DISPLAY est vide sur votre machine, soit le serveur a X11Forwarding no ou pas de xauth. ssh -v indique lequel.

Faut-il XQuartz sur un Mac ?

Oui. macOS n'a pas de serveur X. Installez XQuartz, puis fermez et rouvrez votre session avant d'utiliser ssh -X.

Le X11 forwarding fonctionne-t-il sous Wayland ?

Oui, grâce à XWayland, présent sur la plupart des bureaux Wayland. Si echo $DISPLAY affiche une valeur comme :0 sur votre machine, ssh -X fonctionne comme d'habitude et les programmes s'ouvrent en fenêtres X11.

Pourquoi le X11 forwarding est-il si lent ?

X11 fait beaucoup d'allers-retours entre le programme et votre écran : la latence du réseau compte plus que le débit. ssh -C compresse le trafic, ce qui aide sur les liaisons lentes. Pour un bureau complet via internet, VNC ou RDP à travers un tunnel SSH est en général plus fluide.

Sources

Autres guides : Sessions et tmux

Tous les guides