Den Server einrichten
Installieren Sie xauth und ein kleines Programm zum Testen:
sudo apt install xauth x11-apps
Setzen Sie in /etc/ssh/sshd_config:
X11Forwarding yes
Der Standard von OpenSSH ist no, obwohl die Konfigurationsdatei unter Debian es auf yes setzt. Laden Sie nach einer Änderung neu:
sudo sshd -t && sudo systemctl reload ssh
Auf manchen Systemen heißt der Dienst sshd.
Verbinden und testen
ssh -X user@server
echo $DISPLAY
xeyes
DISPLAY sollte wie localhost:10.0 aussehen. Das ist der Proxy, den sshd auf dem Server anlegt, nicht Ihre echte Anzeige. Setzen Sie DISPLAY nicht von Hand.
Um es für einen Server dauerhaft zu machen, nutzen Sie ~/.ssh/config:
Host server
ForwardX11 yes
-X oder -Y
-X, nicht vertrauenswürdig | -Y, vertrauenswürdig | |
|---|---|---|
| Zugriff auf Ihre Anzeige | Begrenzt durch die X11-SECURITY-Erweiterung | Voll |
Screenshot der ganzen Anzeige mit xwd -root | Gescheitert: unable to get image | Funktionierte |
Eigenschaften anderer Fenster mit xprop | Funktionierte | Funktionierte |
| Zeitlimit | Neue Fenster werden nach 20 Minuten abgelehnt | Keines |
Nicht vertrauenswürdig ist der Standard von Upstream für -X. Diese Ergebnisse stammen aus unserem Test mit Xvfb und eingeschalteter X-Authentifizierung. Ohne Authentifizierung begrenzte -X nichts. -X verringert also, was ein Programm erreichen kann, isoliert es aber nicht. Manche Programme verlieren in diesem Modus Funktionen: xeyes meldete extension "XInputExtension" missing und öffnete sich trotzdem.
Öffnen sich unter -X nach 20 Minuten keine Fenster mehr und es erscheint Can't open display, erhöhen Sie das Limit in ~/.ssh/config, zum Beispiel mit ForwardX11Timeout 8h.
Unter Debian und Ubuntu verhält sich -X wie -Y
Der Client von Debian setzt standardmäßig ForwardX11Trusted yes, daher ist -X dort vertrauenswürdig. In unserem Test zeigte ssh -G unter Debian 13 yes und unter macOS no. Für den strengeren Modus unter Debian fügen Sie -o ForwardX11Trusted=no hinzu, so haben wir den Test ohne Vertrauen ausgeführt. Was Ihr Client tut, sehen Sie mit:
ssh -G server | grep -i forwardx11
Das Sicherheitsrisiko
Bei vertrauenswürdiger Weiterleitung kann ein Programm auf dem Server Ihren Bildschirm aufnehmen und Tasten mitlesen, die Sie in anderen Fenstern tippen. Das kann auch jeder, der auf dem Server an den Dateiberechtigungen vorbeikommt, etwa root, denn er erreicht dieselbe weitergeleitete Anzeige. Leiten Sie X11 nicht an einen Server weiter, dem Sie nicht vertrauen. Nutzen Sie -Y nur, wenn ein Programm mit -X scheitert.
Die Weiterleitung des SSH-Agents birgt ein ähnliches Risiko für Ihre Schlüssel: siehe Risiken der SSH-Agent-Weiterleitung.
Auf einem Mac: XQuartz
macOS hat keinen X-Server. Installieren Sie XQuartz und melden Sie sich dann ab und wieder an, damit DISPLAY in Ihrer Sitzung gesetzt wird. Unter Debian haben wir bestätigt, was bei leerem DISPLAY passiert: Ist echo $DISPLAY leer, verbindet sich ssh -X ohne Weiterleitung und ohne sichtbaren Fehler. Nur ssh -v sagt Ihnen X11 forwarding requested but DISPLAY not set.
Der macOS-Client sucht xauth standardmäßig unter /usr/X11R6/bin/xauth. Beschwert er sich, verweisen Sie in ~/.ssh/config auf das von XQuartz, das normalerweise unter /opt/X11 installiert wird:
Host *
XAuthLocation /opt/X11/bin/xauth
Fehler
| Meldung | Ursache | Prüfen |
|---|---|---|
X11 forwarding request failed on channel 0 | X11Forwarding no auf dem Server oder dort kein xauth. Wir bekamen das für beides | sudo sshd -T | grep -i x11forwarding und which xauth |
Error: Can't open display: ohne etwas dahinter | DISPLAY ist leer, die Weiterleitung ist also aus | echo $DISPLAY auf beiden Seiten und ssh -v |
Warning: untrusted X11 forwarding setup failed: xauth key data not generated | Kein xauth auf Ihrem Rechner | which xauth, dann XAuthLocation setzen |
Fragen
Was ist der Unterschied zwischen ssh -X und ssh -Y?
-X ist die nicht vertrauenswürdige Weiterleitung, eingeschränkt durch die X11-SECURITY-Erweiterung. -Y ist vertrauenswürdig und gibt dem Programm vollen Zugriff auf Ihr Display. Unter Debian und Ubuntu ist -X standardmäßig vertrauenswürdig.
Warum verbindet ssh -X, aber es öffnet sich kein Fenster?
Die Weiterleitung ist nicht gestartet. Entweder ist DISPLAY auf Ihrem Rechner leer, oder der Server hat X11Forwarding no oder kein xauth. ssh -v zeigt, was zutrifft.
Brauche ich XQuartz auf dem Mac?
Ja. macOS hat keinen X-Server. Installieren Sie XQuartz, melden Sie sich ab und wieder an und nutzen Sie dann ssh -X.
Funktioniert X11 Forwarding unter Wayland?
Ja, über XWayland, das die meisten Wayland-Desktops mitbringen. Zeigt echo $DISPLAY auf Ihrem Rechner einen Wert wie :0, funktioniert ssh -X wie gewohnt, und die Programme öffnen sich als X11-Fenster.
Warum ist X11 Forwarding so langsam?
X11 schickt viele Anfragen zwischen Programm und Bildschirm hin und her, deshalb zählt die Latenz des Netzes mehr als die Bandbreite. ssh -C komprimiert den Verkehr und hilft bei langsamen Leitungen. Für einen ganzen Desktop über das Internet ist VNC oder RDP durch einen SSH-Tunnel meist flüssiger.
Quellen
- ssh(1), OpenBSD-Handbuch
- ssh_config(5), OpenBSD-Handbuch
- sshd_config(5), OpenBSD-Handbuch
- ssh_config(5), Debian 13
- XQuartz