-X flag (X11 Forwarding) tampaknya tidak berfungsi di Windows

16

Saya menggunakan Open SSH (OpenSSH_6.6.1p1, OpenSSL 1.0.1i 6 Agustus 2014) di Windows 8.1. Penerusan X11 tampaknya tidak berfungsi. Variabel lingkungan DISPLAY tampaknya tidak diatur.

Misalnya, jika saya menggunakan BitVise atau Putty untuk terhubung, dan menjalankan env, saya melihat:

[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

Jika saya menggunakan OpenSSH (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
sumber
1
Mungkin yang jelas, tapi saya tidak bisa memastikan dari posting Anda - apakah Anda benar-benar memiliki server X yang diinstal pada Windows, misalnya mengikuti bitvise.com/ssh-x11-forwarding ?
1
Ya, saya memiliki Xming X Server ( straightrunning.com/xmingnotes )
abendigo
Apakah Anda - hanya untuk menguji hal-hal - mencoba hal yang sama dengan Putty? Jika tidak, saya sarankan mencoba dengan itu, dan melihat apakah itu berfungsi di sana.
polemon
1
ya, itu bekerja di dempul.
abendigo
Saya sedang memeriksa VM Windows saya sekarang. Mungkin sesederhana memeriksa variabel apa yang diset Putty untuk membuatnya berfungsi. Saya akan menambahkan balasan dalam beberapa jam.
polemon

Jawaban:

16

Sudahkah Anda menetapkan DISPLAYvariabel lingkungan pada klien? Saya tidak yakin shell mana yang Anda gunakan, tetapi dengan turunan shell Bourne (seperti bash), silakan coba:

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

Atau jika Anda menggunakan cmd.exe:

set DISPLAY=127.0.0.1:0
ssh -X marko@vm
yaegashi
sumber
Terima kasih, ini persis apa yang saya lewatkan! Saya akan menghadiahkan hadiah begitu saya diizinkan.
abendigo
Perhatikan bahwa saya memilih jawaban roaima (di bawah) karena ini menjelaskan mengapa dan juga hanya memberikan jawaban.
Azhrei
2
Jadi jawaban roaima menjelaskan mengapa masalah terjadi, tetapi itu tidak membantu saya memecahkan masalah. Saya menjelaskan dalam pertanyaan saya bahwa saya menjalankan windows. jawaban yaegashi memberi saya perintah untuk masuk di windows yang memecahkan masalah saya. itu sebabnya saya memilih jawaban ini.
abendigo
Saya mendaftarkan akun hanya untuk memilih jawaban ini. Saya telah mencari di internet lama sebelum sampai di sini.
Rio Wing
3
Solusi ini tidak berfungsi untuk saya. set DISPLAY=anythingdiikuti oleh ssh -X user@remotepengembalian CreateProcessW failed error:2 ssh_askpass: posix_spawn: No such file or directory Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).Unsetting variabel lingkungan dengan set DISPLAY=memungkinkan saya untuk ssh berhasil lagi, tetapi tanpa bekerja penerusan X. Tidak masuk akal bagi saya bahwa pengaturan DISPLAY harus menyebabkan perangkat lunak meminta kata sandi saya dengan cara ini. github.com/PowerShell/Win32-OpenSSH/issues/1088 github.com/PowerShell/Win32-OpenSSH/issues/1088
Pavel Komarov
14

Ketika Anda menjalankan ssh -X remotehostdan Anda DISPLAY=localhost:10disajikan ke host jarak jauh. sshmendengarkan port itu dan meneruskan lalu lintas kembali ke sistem panggilan, menggunakan nilai aslinya DISPLAYuntuk menentukan alamat server.

Mungkin pada sistem lokal Anda, Anda punya DISPLAY=:0. Atau jika belum, itulah yang sedang default. Ini menginstruksikan sistem lokal untuk menggunakan soket domain UNIX untuk berkomunikasi dengan layar. Sayangnya Xmingpada Windows tidak mengatur soket domain UNIX sehingga sshpenerusan X11 Anda gagal dengan kesalahan semacam ini:

$ 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

Cara mengatasinya - setidaknya sejauh ini Xming- cukup sederhana. Ubah DISPLAYvariabel untuk merujuk soket TCP yang mendengarkan daripada soket domain UNIX.

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

Anda mungkin harus menyesuaikan Xmingkonfigurasi Anda untuk mendengarkan pada port TCP lokal 6000. Berikut adalah caranya saya mulai Xming:

Xming.exe :0 -clipboard -multiwindow

Dan di sini ada bukti untuk mengkonfirmasi bahwa Xmingmendengarkan di port tcp / 6000:

$ netstat -na | grep ':6000 .*LISTEN'
  TCP    0.0.0.0:6000           0.0.0.0:0              LISTENING
roaima
sumber
Terima kasih, saya punya masalah persis ini! Saya tidak tahu bahwa: 0 berarti koneksi dilakukan melalui soket. Saya selalu berpikir itu hanya singkatan untuk localhost: 0.
Andreas Raster
Saya memiliki masalah yang sama dengan Bash untuk Ubuntu untuk Windows & Xming, dan ini menyelesaikannya! Saya hanya perlu mengatur DISPLAY ke localhost:0.
Ben Richards
DISPLAY=:0Adakah ide mengapa berfungsi dengan baik pada WSL + XMing untuk xeyes, tetapi tidak untuk ssh -X? Apakah ssh -Xmengartikan $ DISPLAY berbeda dari klien X11 lokal lainnya? Apakah klien X11 lain mundur secara otomatis localhost:0tetapi ssh -Xtidak?
Markus Kuhn
Di man Xsitu tertulis bahwa nama host kosong di DISPLAY =: 0 berarti "Transportasi lokal yang paling efisien akan dipilih." Jadi mungkin ssh -Xmenggunakan algoritma yang berbeda untuk melakukan itu dibandingkan dengan mengatakan xeyes?
Markus Kuhn
@MarkusKuhn mungkin WSL + Xming berbeda dengan Cygwin + Xming. Saya melihat bahwa saya sekarang menggunakan DISPLAY=:0dan ssh -Xmeneruskannya dengan senang hati.
roaima