Wie aktiviere ich die SSH X11-Weiterleitung über einen zusätzlichen Server?

33

Ich habe Hosts A, B und C. Von Host aus kann AI nur über ssh auf B zugreifen. Von BI aus kann ich auf C zugreifen. Ich möchte X11-Programme auf C ausführen und die Anzeige an A weiterleiten können.

Ich habe es versucht:

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

Aber es geht nicht.

lexsys
quelle

Antworten:

24

Es gibt verschiedene Möglichkeiten, dies zu tun. Ich bevorzuge es, den ssh-Port weiterzuleiten:

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

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

Stellen Sie als Nächstes über diesen neu erstellten Tunnel mit [localPort] eine Verbindung zu C von A her und leiten Sie 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 ein beliebiger Port sein, den Sie noch nicht auf A abgehört haben. Der Einfachheit halber verwende ich häufig 2222.

Dave
quelle
3
nicht genau ... wenn X11Forwarding auf Server C nicht aktiviert ist, funktioniert es nicht. es wird auch nicht funktionieren, wenn man AllowTcpForwarding yes und GatewayPorts yes auf Server B setzt. Diese Antwort ist überhaupt nicht akzeptabel
asdmin
Sie machen einen guten Punkt, ich habe dies nicht bemerkt, da ich Debian verwende, auf dem X11Forwarding und AllowTcpForwarding standardmäßig aktiviert sind. GatewayPorts wird nicht benötigt, da SSH bei Deaktivierung weiterhin localhost überwacht und mit diesem verbunden ist. Sie würden es nur brauchen, wenn Sie die zweite Verbindung über eine externe IP für Maschine A herstellen
möchten
In Schritt 1 wurde ich nicht nach dem Kennwort für Host B gefragt, und am Ende wurde eine Verbindung zu Host C hergestellt. In einem anderen Fenster habe ich Schritt 2 versucht und "ssh_exchange_identification: Connection closed by remote host" (ssh_exchange_identification: Verbindung wurde vom Remote-Host geschlossen) angezeigt.
Msb
ssh: connect to host ... port 22: Die Verbindung wurde während der Ausführung des ersten Befehls verweigert
Rodrigo
7

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 SSH an C: 22 weitergeleitet. Über localhost: 2022 Verwenden Sie X wie gewohnt

AgentK
quelle
2
Dies funktioniert aus den an anderer Stelle genannten Gründen nicht, wenn in B (dem Gateway) nicht die richtigen SSHD-Weiterleitungsoptionen aktiviert sind.
g33kz0r
Ich habe nicht nach meinem Passwort für Host B gefragt, was seltsam ist. und es hat nicht funktioniert, ich habe die Fehlermeldung "Kanal 2: Öffnen fehlgeschlagen: administrativ verboten: Öffnen fehlgeschlagen ssh_exchange_identification: Verbindung vom Remote-Host geschlossen"
msb
4

Angenommen, das Problem ist, dass die mittlere Maschine kein X hat, aber ansonsten so konfiguriert ist, dass X11 weitergeleitet werden kann. Installieren Sie einfach xauth.

Auf einem Yum-basierten System (Fedora, Red Hat, Centos):

B$ sudo yum install xauth

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

B$ sudo apt-get install xauth
Jayen
quelle
Yay-perfekt für kopflose Himbeer-Pi.
cmc
@cmc oder mit ssh wie ein VPN.
Jayen
@cmc hast du yumeinen pi?
Jayen
nope-sudo apt-get install xauth
cmc
3

Für neuere Versionen müssen Sie opensshd deaktivieren, X11UseLocalhostdamit dies funktioniert.

Sie müssen dies auf Host C tun /etc/ssh/sshd_configund sshd neu starten, damit dies funktioniert:

X11Forwarding yes
X11UseLocalhost no
Brad Allison
quelle
2

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

man 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 und auf allen von Ihnen verwendeten Zwischen-Sshds aktiviert ist .

Nur ein kleiner Hinweis: Sie sollten versuchen, VNC zu verwenden. Die X11-Bildschirmweiterleitung ist sehr bandbreitenintensiv.

asdmin
quelle
Für die Vorschläge von @ AgentK und @ Dave muss X11Forwarding nur auf dem endgültigen Host aktiviert sein, da sie einen SSH-Tunnel verwenden, um den Zwischenhost zu umgehen. Ihr Vorschlag ist mit ziemlicher Sicherheit der Grund, warum die OP-Methode zunächst fehlgeschlagen ist. Dies bedeutet jedoch nicht, dass die Antworten anderer Personen "nicht akzeptabel" sind
Daniel Lawson,
Ihre Antworten waren fehlerhaft und behebten das Problem, ohne es zu lösen. Eine richtige und nützliche Antwort würde die ursprüngliche Frage in Betracht ziehen und sie lösen und nur dann andere Möglichkeiten bieten, wenn die ursprüngliche Frage nicht lösbar ist. Übrigens erwähnte keiner von ihnen X11Forwarding, was wesentlich ist
spätestens
Auf einigen Systemen ist die Standardeinstellung " yes".
Brad Gilbert
Ich habe überprüft, ob X11Forwarding für B und C aktiviert ist und AllowTcpForwarding für B auf yes gesetzt ist. Das Ergebnis meiner Befehle ist jedoch dasselbe. Und Dave's Antwort funktioniert gut für mich.
Lexsys
dann mach das, aber es ist nur ein Heilmittel. Sie können auch ssh mit dem Parameter ‚v‘ starten, oder versuchen Sie echo $ DISPLAY alle verschachtelten ssh Befehle es um herauszufinden , wo $ DISPLAY verloren gehen
asdmin
2

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
Jayen
quelle
1

Hast du es versucht mit

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

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

Pyhimys
quelle
Das gleiche Ergebnis.
Lexsys
Dies funktionierte für mich, aber nur um herauszufinden, wie langsam X11
Rodrigo