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 affichage | Limité par l'extension X11 SECURITY | Complet |
Capture d'écran de tout l'affichage avec xwd -root | Échec : unable to get image | A fonctionné |
Propriétés d'une autre fenêtre avec xprop | A fonctionné | A fonctionné |
| Limite de durée | Nouvelles fenêtres refusées après 20 minutes | Aucune |
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
| Message | Cause | Vérification |
|---|---|---|
X11 forwarding request failed on channel 0 | X11Forwarding no sur le serveur, ou pas de xauth là-bas. Nous l'avons obtenu pour les deux | sudo sshd -T | grep -i x11forwarding et which xauth |
Error: Can't open display: sans rien après | DISPLAY est vide, la redirection est donc désactivée | echo $DISPLAY des deux côtés, et ssh -v |
Warning: untrusted X11 forwarding setup failed: xauth key data not generated | Pas de xauth sur votre machine | which 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
- ssh(1), manuel OpenBSD
- ssh_config(5), manuel OpenBSD
- sshd_config(5), manuel OpenBSD
- ssh_config(5), Debian 13
- XQuartz