-X-Flag (X11-Weiterleitung) scheint in Windows nicht zu funktionieren

16

Ich verwende Open SSH (OpenSSH_6.6.1p1, OpenSSL 1.0.1i, 6. August 2014) in Windows 8.1. Die X11-Weiterleitung scheint nicht zu funktionieren. Die Umgebungsvariable DISPLAY scheint nicht gesetzt zu sein.

Wenn ich zum Beispiel BitVise oder Putty verwende, um eine Verbindung herzustellen und env auszuführen, wird Folgendes angezeigt:

[marko@vm:~]$ env
XDG_SESSION_ID=6
TERM=xterm
SHELL=/bin/bash
SSH_CLIENT=192.168.1.174 61102 22
SSH_TTY=/dev/pts/0
USER=marko
MAIL=/var/mail/marko
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
PWD=/home/marko
LANG=en_CA.UTF-8
NODE_PATH=/usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript
SHLVL=1
HOME=/home/marko
LANGUAGE=en_CA:en
LOGNAME=marko
SSH_CONNECTION=192.168.1.174 61102 192.168.1.64 22
XDG_RUNTIME_DIR=/run/user/1000
DISPLAY=localhost:10.0
_=/usr/bin/env

Wenn ich stattdessen OpenSSH verwende (ssh -X marko @ vm):

[marko@vm:~]$ env
XDG_SESSION_ID=8
TERM=cygwin
SHELL=/bin/bash
SSH_CLIENT=192.168.1.174 61150 22
SSH_TTY=/dev/pts/1
USER=marko
MAIL=/var/mail/marko
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
PWD=/home/marko
LANG=en_CA.UTF-8
NODE_PATH=/usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript
SHLVL=1
HOME=/home/marko
LANGUAGE=en_CA:en
LOGNAME=marko
SSH_CONNECTION=192.168.1.174 61150 192.168.1.64 22
XDG_RUNTIME_DIR=/run/user/1000
_=/usr/bin/env
abendigo
quelle
1
Könnte ein offensichtlicher sein, aber ich kann nicht sicher sagen, aus Ihrem Beitrag - haben Sie tatsächlich einen X-Server unter Windows installiert, z. B. nach bitvise.com/ssh-x11-forwarding ?
1
Ja, ich habe Xming X Server ( straightrunning.com/xmingnotes )
abendigo
Haben Sie - nur um Dinge zu testen - dasselbe mit PuTTY versucht? Wenn nicht, schlage ich vor, es damit zu versuchen und zu sehen, ob es dort funktioniert.
Polemon
1
Ja, es funktioniert in Kitt.
Abendigo
Ich überprüfe gerade meine Windows-VM. Es könnte so einfach sein, zu überprüfen, welche Art von Variablen PuTTY setzt, um dies zum Laufen zu bringen. Ich werde in ein paar Stunden eine Antwort hinzufügen.
Polemon

Antworten:

16

Haben Sie DISPLAYauf dem Client eine Umgebungsvariable festgelegt? Ich bin nicht sicher, welche Shell Sie verwenden, aber mit Bourne-Shell-Derivat (wie Bash) versuchen Sie bitte:

export DISPLAY=127.0.0.1:0
ssh -X marko@vm

Oder wenn Sie cmd.exe verwenden:

set DISPLAY=127.0.0.1:0
ssh -X marko@vm
yaegashi
quelle
Danke, genau das hat mir gefehlt! Ich werde das Kopfgeld gewähren, sobald es mir gestattet ist.
Abendigo
Beachten Sie, dass ich die Antwort von Roaima (siehe unten) hochgestimmt habe, weil sie das Warum beschreibt und nur eine Antwort gibt.
Azhrei
2
Die Antwort von Roaima erklärt also, warum das Problem aufgetreten ist, hat mir aber nicht geholfen, das Problem zu lösen. Ich erklärte in meiner Frage, dass ich Windows laufen ließ. Die Antwort von yaegashi gab mir den Befehl, Windows zu öffnen, um mein Problem zu lösen. Deshalb habe ich diese Antwort gewählt.
Abendigo
Ich habe ein Konto registriert, nur um diese Antwort zu bewerten. Ich hatte lange vor meiner Ankunft im Internet gesucht.
Rio Wing
3
Diese Lösung funktioniert bei mir nicht. set DISPLAY=anythinggefolgt ssh -X user@remotekehrt CreateProcessW failed error:2 ssh_askpass: posix_spawn: No such file or directory Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).die Umgebungsvariable Entschärfen mit set DISPLAY=mir erfolgreich wieder ssh erlaubt, aber ohne X - Forwarding zu arbeiten. Es macht für mich keinen Sinn, dass die Einstellung DISPLAY dazu führen sollte, dass die Software auf diese Weise nach meinem Passwort fragt. github.com/PowerShell/Win32-OpenSSH/issues/1088 github.com/PowerShell/Win32-OpenSSH/issues/1088
Pavel Komarov
14

Wenn Sie ausgeführt werden ssh -X remotehostund DISPLAY=localhost:10dem Remote-Host angezeigt werden. sshÜberwacht diesen Port und leitet den Datenverkehr an das aufrufende System weiter. Dabei wird der ursprüngliche Wert von verwendet DISPLAY, um die Serveradresse zu ermitteln.

Es ist wahrscheinlich, dass Sie auf Ihrem lokalen System haben DISPLAY=:0. Oder wenn Sie nicht haben, ist es das, was es standardmäßig ist. Dadurch wird das lokale System angewiesen, den UNIX-Domänen-Socket für die Kommunikation mit der Anzeige zu verwenden. Leider Xmingrichtet Windows diesen UNIX-Domain-Socket nicht ein, sodass Ihre sshX11-Weiterleitung mit dieser Art von Fehler fehlschlägt:

$ export DISPLAY=:0
$ ssh -X remotehost xlogo
connect /tmp/.X11-unix/X0: No such file or directory
Error: Can't open display: localhost:10.0

Das Update ist - zumindest soweit es Xminggeht - ziemlich einfach. Ändern Sie die DISPLAYVariable so, dass sie auf einen empfangsbereiten TCP-Socket und nicht auf einen UNIX-Domänen-Socket verweist.

$ export DISPLAY=localhost:0
$ ssh -X remotehost xlogo

Möglicherweise müssen Sie Ihre XmingKonfiguration anpassen , um den lokalen TCP-Port 6000 abzuhören. So fange ich an Xming:

Xming.exe :0 -clipboard -multiwindow

Und hier sind Beweise, die bestätigen, dass XmingPort tcp / 6000 abgehört wird:

$ netstat -na | grep ':6000 .*LISTEN'
  TCP    0.0.0.0:6000           0.0.0.0:0              LISTENING
Roaima
quelle
Danke, ich hatte genau dieses Problem! Ich wusste nicht, dass: 0 bedeutet, dass die Verbindung über eine Steckdose hergestellt wird. Ich dachte immer, dass es nur eine Abkürzung für localhost ist: 0.
Andreas Raster
Ich hatte das gleiche Problem mit Bash für Ubuntu für Windows & Xming, und das löste es! Ich musste nur DISPLAY auf einstellen localhost:0.
Ben Richards
Irgendeine Idee, warum DISPLAY=:0WSL + XMing für gut funktioniert xeyes, aber nicht für ssh -X? Ist ssh -X$ DISPLAY unterschiedlich von anderen lokalen X11 - Clients zu interpretieren? Greifen andere X11-Clients automatisch auf zurück localhost:0, ssh -Xaber nicht?
Markus Kuhn
Darauf man Xsteht, dass der leere Hostname in DISPLAY =: 0 "Der effizienteste lokale Transport wird ausgewählt" bedeutet. Kann man also ssh -Xeinen anderen Algorithmus verwenden, um das zu tun, als etwa xeyes?
Markus Kuhn
@MarkusKuhn vielleicht ist WSL + Xming anders als Cygwin + Xming. Ich sehe, dass ich es jetzt benutze DISPLAY=:0und ssh -Xgerne weitergebe.
Roaima