Kann man nach `ssh` ohne` -X` an einer Maschine `$ DISPLAY` ändern, damit es wie` ssh -X` funktioniert?

22

Nach dem sshohne -Xeine Maschine ist es möglich , einige Einstellungen zu ändern (zum Beispiel $DISPLAY) , um es wie funktioniert ssh -X? Wenn nicht, woran liegt das? Vielen Dank.

Tim
quelle
Ich würde vorschlagen, den Fragentitel durch Weglassen zu verkürzen 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.
Dmitry Grigoryev

Antworten:

33

Sie können eine zweite Verbindung mit aktivierter X11-Weiterleitung erstellen und anschließend die DISPLAYUmgebungsvariable 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 sshnichts, 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.

X11-Weiterleitung von Hand

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=:0auf 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 ~Cund fügen Sie eine Remote-Weiterleitung vom Port 6000+43zum Unix-Socket hinzu, der der Anzeige entspricht :0:

hzy64$~C
ssh> -R 6043:/tmp/.X11-unix/X0
Forwarding port.

$DISPLAYStellen 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.

Mosvy
quelle
1
Wenn Ihnen die Sicherheit am Herzen liegt, -Xwäre das etwas besser als -Y, oder?
Stephen Kitt
13
Viele (die meisten?) X11-Programme funktionieren nicht mit -X, nur mit -Y. Leute nicht bemerken , dass , weil auf vielen System (zB debian.) ForwardX11Trustedeingestellt ist yesstandardmäßig aktiviert und das -Xund -YOptionen sind gleichwertig ;-)
mosvy