Frage Wie kann ich die SSH X11-Weiterleitung über einen zusätzlichen Server aktivieren?


Ich habe Hosts A, B und C. Von Host A kann ich nur über ssh zugreifen B. Von B kann ich auf C. zugreifen. Ich möchte in der Lage sein, X11-Programme auf C laufen zu lassen und Anzeige auf A weiterzuleiten.

Ich habe es versucht:

A $ ssh -X B
B $ ssh -X C
C $ xclock
Fehler: Die Anzeige kann nicht geöffnet werden:

Aber es funktioniert nicht.


30
2017-08-12 05:37


Ursprung




Antworten:


Es gibt mehrere Möglichkeiten, dies zu tun. Ich bevorzuge die Weiterleitung des SSH-Ports:

Stellen Sie zunächst eine Verbindung zu Maschine B her und leiten Sie [localPort] an C: 22 bis B weiter

A$ ssh -L [localPort]:C:22 B

Als nächstes verbinden Sie sich von A über diesen neu erstellten Tunnel mit [localPort] mit C und leiten X11 weiter

A$ ssh -X -p [localPort] localhost

Jetzt können wir X11-Programme auf C ausführen und sie auf A anzeigen lassen

C$ xclock

[localPort] kann jeder Port sein, den Sie nicht gerade auf A hören. Ich benutze oft 2222 zur Vereinfachung.


20
2017-08-12 05:54



nicht genau ... wenn X11Forwarding auf Server C nicht aktiviert ist, wird es nicht funktionieren. Es wird auch nicht funktionieren, es sei denn, man setzt AllowTcpForwarding yes und GatewayPorts yes auf Server B. Diese Antwort ist überhaupt nicht akzeptabel - asdmin
Sie machen einen guten Punkt, ich habe das nicht bemerkt, seit ich Debian verwende, auf dem X11Forwarding und AllowTcpForwarding standardmäßig aktiviert sind. GatewayPorts wird nicht benötigt, da SSH, wenn es deaktiviert ist, immer noch auf localhost hört und mit dem wir uns verbinden. Sie würden es nur brauchen, wenn Sie die zweite Verbindung über eine externe IP für Maschine A herstellen wollten. - dave
In Schritt 1 hat es mich nicht nach dem Kennwort für Host B gefragt, und ich bin in Host C verbunden. In einem anderen Fenster habe ich Schritt 2 versucht und bekomme "ssh_exchange_identification: Verbindung vom Remote-Host geschlossen". - msb
ssh: connect to host ... Port 22: Verbindung während der Ausführung des ersten Befehls abgelehnt - Rodrigo


Dies kann einfach über die Portweiterleitung erreicht werden:

A$ ssh -NL 2022:C:22 B &
A$ ssh -X -p 2022 localhost
C$ xclock

Port localhost: 2022 wird über B an C: 22 weitergeleitet SSH an C über localhost: 2022 Verwenden Sie X wie gewohnt


7
2017-08-12 06:10



Dies funktioniert nicht aus den gleichen Gründen, die an anderer Stelle erwähnt wurden, wenn B (das Gateway) nicht über die richtigen sshd-Weiterleitungsoptionen verfügt. - g33kz0r
habe nicht nach meinem Passwort gefragt, um B zu hosten, was seltsam ist; und es hat nicht funktioniert, ich habe die Fehlermeldung "Kanal 2: Öffnen fehlgeschlagen: administrativ verboten: Öffnen fehlgeschlagen ssh_exchange_identification: Verbindung von Remote-Host geschlossen" - msb


Angenommen das Problem ist, dass der mittlere Rechner kein X hat, aber ansonsten so konfiguriert ist, dass er X11 weiterleitet, installiere einfach xauth.

auf einem yum-basierten System (Fedora, Redhat, Centos):

B$ sudo yum install xauth

auf einem apt-basierten System (debian, ubuntu):

B$ sudo apt-get install xauth

4
2017-10-12 00:54



Yay - perfekt für kopflose Raspberry Pi. - cmc
@ cmc oder mit ssh wie ein vpn. - Jayen
@cmc hast du yum auf einem Pi? - Jayen
nope-sudo apt-get installieren xauth - cmc
@cmc danke, bearbeite die Antwort - Jayen


Sie können die X11-Anzeige nicht weiterleiten, wenn X11Forwarding in einem von Ihnen verwendeten sshd deaktiviert ist.

Mann sshd_config:

X11Forwarding
  Specifies whether X11 forwarding is permitted. The argument must be “yes”
  or “no”.  The default is “no”.

Sie müssen sicherstellen, dass X11Forwarding am Ziel aktiviert ist und alle dazwischenliegenden sshds, die du verwendest.

Nur ein kleiner Hinweis: Sie sollten versuchen, VNC zu verwenden, X11-Display-Weiterleitung ist ziemlich Bandbreite.


2
2017-08-12 06:59



Die Vorschläge von AgentK und @dave erfordern nur, dass X11Forwarding auf dem letzten Host aktiviert wird, da sie einen SSH-Tunnel verwenden, um den Zwischenhost zu umgehen. Ihr Vorschlag ist fast sicher, warum die Methode des OP zunächst versagt hat, aber das bedeutet nicht, dass die Antworten anderer Leute "nicht akzeptabel sind". - Daniel Lawson
ihre Antworten waren mangelhaft und behob das Problem, ohne es zu lösen. Eine richtige und nützliche Antwort würde die ursprüngliche Frage berücksichtigen und sie lösen und andere Möglichkeiten bieten nur für den Fall Die ursprüngliche Frage ist nicht lösbar. übrigens, keiner von ihnen erwähnte X11Forwarding, was wesentlich ist - asdmin
Auf manchen Systemen ist der Standardwert "yes". - Brad Gilbert
Ich habe überprüft, dass X11Forwarding auf B und C aktiviert ist und AllowTcpForwarding auf BJ auf Ja eingestellt ist. Aber das Ergebnis meiner Befehle ist das gleiche. Und dave's Antwort funktioniert gut für mich. - lexsys
dann mach das, aber es ist nur ein Heilmittel. Sie können ssh auch mit dem Parameter '-v' starten oder versuchen, alle verschachtelten ssh-Befehle mit echo $ DISPLAY auszuprobieren, um herauszufinden, wo $ DISPLAY verloren geht - asdmin


Für neuere Versionen müssen Sie opensshd deaktivieren X11UseLocalhost damit dies funktioniert.

Sie müssen dies auf Host C tun /etc/ssh/sshd_config und starte sshd neu damit das funktioniert:

X11Forwarding yes
X11UseLocalhost no

2
2017-09-05 21:15





Wenn Sie häufig von A nach C wechseln, können Sie B als Proxy konfigurieren:

A:~/.ssh/config:

Host C
  ForwardX11   yes
  ProxyCommand ssh -W %h:%p B

dann ist es nur:

A$ ssh C xclock

2
2018-04-12 00:46





Hast du es versucht?

A$ ssh -Y B
B$ ssh -Y C
C$ xlclock

Das -Y-Flag "Aktiviert die vertrauenswürdige X11-Weiterleitung."


1
2017-08-12 06:00



Das gleiche Ergebnis. - lexsys
Das hat für mich funktioniert, aber nur um herauszufinden, wie langsam X11 ist - Rodrigo