Weiterleiten von X11 über SSH, wenn die Serverkonfiguration dies nicht zulässt

10

Stellen Sie sich eine Situation vor, in der ich mich über SSH von Maschine A zu Maschine B anmelde, auf Maschine A eine X-Sitzung habe und auf B ein X-Programm ausführen möchte.

ssh -X Bmacht dies transparent. Aber was ist, wenn die Serverkonfiguration fehlt X11Forwarding yes, ich keine Root-Berechtigungen auf dem Server habe und der Serveradministrator gleichgültig ist?

Es ist offensichtlich möglich, die X11-Verbindung weiterzuleiten, da ich alles, was ich will, über den SSH-Kanal übertragen kann. Wenn der lokale X-Server TCP-Verbindungen zulässt, ist dies in der Tat so einfach wie ssh -R 6010:localhost:6000(Anpassung an die Anzeigenummern). Was ist mit dem häufigen Fall, dass der lokale X-Server nur Socket-Verbindungen zulässt? Wie mache ich eine X-Weiterleitung bequem und sicher mit einem Minimum an Installationsanforderungen (insbesondere bei B)?

Gilles 'SO - hör auf böse zu sein'
quelle

Antworten:

2

Die Antwort von @Demi ist gut, aber ich denke, das Ausfüllen wäre eine große Hilfe.

  • local - Der lokale Computer, der einen Xserver bedient.
  • remote - Der Remotecomputer, der die Anwendung bedient, die die an den Xserver gesendeten Daten steuert

Fernbedienung /etc/ssh/sshd_config:

X11Forwarding no
X11DisplayOffset 10
X11UseLocalhost yes

Remote ~/.Xauthorityist leer oder existiert nicht

Auf lokal:

Xephyr -ac -screen 1280x800 -br -reset   :2 &
DISPLAY=:2 ssh  -fR 6010:/tmp/.X11-unix/X2  user@remote "DISPLAY=:10 xeyes"

Im Test lief auf local Ubuntu 18.05, auf remote auf Debian Jesse.

Craig Hicks
quelle
5

Spricht das Protokoll X11 beim Sprechen mit einem TCP-Port anders, wenn es mit einem Socket spricht?

Vielleicht könnten Sie Ihren eigenen Verwendungsvorschlag kombinieren ssh -R 6010:localhost:6000, um die X11-Daten in die Over-Port-Weiterleitung zu bringen, und dann die lokale Verbindung zwischen dem TCP-Port und dem X11-Socket-Listener mit nc wie folgt überbrücken:

nc -l -p 6000 > /tmp/.X11-unix/X0
Caleb
quelle
Ja, das ist die Idee. Aber ich hatte auf eine Antwort gehofft, die besagt: "Setzen Sie dies auf Ihre .ssh/configClientseite und das auf Ihre .profileServerseite und führen Sie es dann einfach aus. ssh B"
Gilles 'SO - hör auf böse zu sein'
1
Es gibt eine einfache Antwort "Fügen Sie dies in Ihre Konfiguration ein". Das Problem besteht darin, dass Sie dies in Ihren Fragenqualifikationen ausschließen, da die von Ihnen benötigte Option auf der Seite "sshd_config" von B angezeigt wird. Sie versuchen, einen eingefügten Block zu umgehen Ort, um es schwierig zu machen, versehentlich ein Sicherheitsproblem zu eröffnen.
Caleb
3
Ich ziele auf den (meiner Erfahrung nach sehr häufigen) Fall ab, in dem es dem Administrator egal ist, und belasse nur die Standardeinstellungen. Die X11-Weiterleitung ist nicht durch Richtlinien verboten, sondern nur durch die Gleichgültigkeit des Systemadministrators. Auf jeden Fall ermöglicht die X11-Weiterleitung dem Server, den Client anzugreifen, sodass ein Verbot auf dem Server wenig sinnvoll ist.
Gilles 'SO - hör auf böse zu sein'
@ Gilles Ich bin damit einverstanden, dass die Standardeinstellung nicht wirklich vor irgendetwas Nützlichem schützt. Sollen wir uns also dafür einsetzen, dass die Standardeinstellungen im Upstream geändert werden?
Caleb
Für mich /tmp/.X11-unix/X0ist ein Unix-Domain-Socket kein FIFO, daher endet jeder Umleitungsversuch mit ENXIO: No such device.
Samveen
2
  1. Starten Sie einen zusätzlichen X-Server mit Xephyr. Dies dient der Sicherheit - es verhindert, dass das Remote-System Ihr System gefährdet.

  2. Verwenden Sie SSH, um einen Remote-Socket an den Xephyr-Socket weiterzuleiten. SSH unterstützt auch die Weiterleitung von Unix-Sockets.

  3. Stellen Sie die Umgebungsvariablen auf dem Remote-Server richtig ein.

Demi
quelle