Antworten:
Sie können eine zweite Verbindung mit aktivierter X11-Weiterleitung erstellen und anschließend die DISPLAY
Umgebungsvariable aus der zweiten Verbindung in der ersten verwenden.
Im 1. Fenster:
$ ssh user@host
user@host$ ...
Im 2. Fenster:
$ ssh -Y user@host 'echo $DISPLAY; while sleep 3600; do :; done'
localhost:10.0
Zurück zum 1. Fenster:
user@host$ export DISPLAY=localhost:10.0
user@host$ xterm
Tut leider ssh
nichts, um die X11 (oder andere) Weiterleitungen an den Prozess / die Sitzung, den / die sie gestartet hat, oder an den Benutzer, den / die sie auf der Remote-Maschine ausführt, zu enthalten (z. B. indem Unix-Sockets verwendet werden, ohne Anmeldeinformationen zu überprüfen oder Namespaces zu verwenden). und diese Weiterleitungen sind einfache TCP-Listening-Sockets, mit denen sich jeder auf der Remote-Maschine verbinden kann; Die gesamte Sicherheit der X11-Weiterleitung hängt von der X11-Authentifizierung ab.
In der sshd_config(5)
Manpage wird Folgendes erwähnt:
Das Deaktivieren der X11-Weiterleitung hindert Benutzer nicht daran, X11-Datenverkehr weiterzuleiten, da Benutzer jederzeit ihre eigenen Weiterleitungen installieren können.
So können Sie das von Hand machen.
Stellen Sie zunächst sicher, dass alle host- oder benutzerbasierten Zugriffssteuerungen deaktiviert sind, die den x11-Authentifizierungsmechanismus umgehen [1]:
$ xhost $(xhost | sed -n /:/s/^/-/p)
access control enabled, only authorized clients can connect
Zeigen Sie dann die Authentifizierungsinformationen für DISPLAY=:0
auf dem lokalen Computer an:
$ xauth list :0
ohzd/unix:0 MIT-MAGIC-COOKIE-1 a86982ddce0c1e1c1a8c5e8b2846e43b
Stellen Sie ohne X11-Weiterleitung eine Verbindung zum Remote-Computer her:
$ ssh user@hzy64
user@hzy64's password:
[motd snipped]
Öffnen Sie die Befehlszeile über ~C
und fügen Sie eine Remote-Weiterleitung vom Port 6000+43
zum Unix-Socket hinzu, der der Anzeige entspricht :0
:
hzy64$~C
ssh> -R 6043:/tmp/.X11-unix/X0
Forwarding port.
$DISPLAY
Stellen Sie die Umgebungsvariable ein und fügen Sie die Authentifizierungsinformationen von der lokalen zur entfernten Maschine hinzu:
hzy64$ export DISPLAY=localhost:43
hzy64$ xauth add $DISPLAY . a86982ddce0c1e1c1a8c5e8b2846e43b
xauth: file /home/user/.Xauthority does not exist
Jetzt können Sie loslegen:
hzy64$ xterm
[1] Wegen eines fehlgeleiteten Bugfixes ist die benutzerbasierte Zugriffskontrolle in Debian standardmäßig über aktiviert /etc/X11/Xsession.d/35x11-common_xhost-local
. Schlimmer noch, es ist das einzige, das standardmäßig in XWayland verfügbar ist und auch nicht deaktiviert werden kann . Jedes Programm, das Proxys des X11-Protokolls (z. B. xscope
) ausführt, muss seine eigene x11-Authentifizierungs-Cookie-Prüfung durchführen (wie dies bei ssh der Fall ist), es sei denn, es möchte eine Lücke zum X11-Server öffnen.
-X
wäre das etwas besser als -Y
, oder?
-X
, nur mit -Y
. Leute nicht bemerken , dass , weil auf vielen System (zB debian.) ForwardX11Trusted
eingestellt ist yes
standardmäßig aktiviert und das -X
und -Y
Optionen sind gleichwertig ;-)
change $DISPLAY to
. Der aktuelle Fragentitel kann in den Suchergebnissen nicht vollständig angezeigt werden, und das Ändern von $ DISPLAY ist wirklich Teil der Antwort, nicht Teil der Frage.