-X标志(X11转发)在Windows中似乎不起作用


16

我正在Windows 8.1中使用Open SSH(OpenSSH_6.6.1p1,OpenSSL 1.0.1i 2014年8月6日)。X11转发似乎不起作用。似乎未设置DISPLAY环境变量。

例如,如果我使用BitVise或Putty进行连接并运行env,则会看到:

[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

如果我改用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

1
可能是显而易见的,但是我不能从您的帖子中确定-您是否确实在Windows上安装了X服务器,例如,遵循 bitvise.com/ssh-x11-forwarding

1
是的,我的Xming X服务器(straightrunning.com/xmingnotes
abendigo

您是否只是为了测试?是否曾尝试过PuTTY?如果没有,我建议尝试一下,看看它是否可以正常工作。
polemon 2015年

1
是的,它可以在腻子中使用。
abendigo 2015年

我正在检查我的Windows VM。它可能很简单,只需检查PuTTY设置的变量类型即可使其工作。我会在几个小时内回复。
polemon 2015年

Answers:


16

您是否DISPLAY在客户端上设置了环境变量?我不确定您使用的是哪个shell,但请使用Bourne shell衍生物(如bash),请尝试:

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

或者,如果您使用的是cmd.exe:

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

谢谢,这正是我所缺少的!如果允许,我会立即授予赏金。
abendigo 2015年

请注意,我投票赞成roaima的答案(如下),因为它不仅描述了原因,而且还描述了原因
Azhrei 2015年

2
因此,roaima的答案解释了问题发生的原因,但并不能帮助我解决问题。我在问题中解释说我正在运行Windows。yaegashi的回答给了我一个在Windows上输入的命令,该命令解决了我的问题。这就是为什么我选择这个答案。
abendigo

我注册了一个帐户只是为了投票给这个答案。在到达这里之前,我已经在互联网上搜索了很长时间。
里约

3
该解决方案对我不起作用。set DISPLAY=anything然后ssh -X user@remote返回CreateProcessW failed error:2 ssh_askpass: posix_spawn: No such file or directory Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).return取消设置环境变量set DISPLAY=可以使我再次成功ssh,但不能进行X转发。对我来说,设置DISPLAY应该使软件以这种方式询问我的密码对我没有任何意义。github.com/PowerShell/Win32-OpenSSH/issues/1088 github.com/PowerShell/Win32-OpenSSH/issues/1088
Pavel Komarov

14

运行时ssh -X remotehost,您会看到DISPLAY=localhost:10远程主机。ssh在该端口上侦听并将流量转发回呼叫系统,并使用其原始值DISPLAY确定服务器地址。

在您的本地系统上,您可能已经拥有DISPLAY=:0。或者,如果没有,则默认为它。这指示本地系统使用UNIX域套接字与显示器进行通信。不幸的是,Xming在Windows上没有设置该UNIX域套接字,因此您的sshX11转发失败并出现以下错误:

$ 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

修复-至少就目前Xming而言-非常简单。修改DISPLAY变量以引用侦听的TCP套接字,而不是UNIX域套接字。

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

您可能需要调整Xming配置以侦听本地TCP端口6000。这是我的开始方式Xming

Xming.exe :0 -clipboard -multiwindow

这是确认Xming正在侦听端口tcp / 6000的证据:

$ netstat -na | grep ':6000 .*LISTEN'
  TCP    0.0.0.0:6000           0.0.0.0:0              LISTENING

谢谢,我有这个确切的问题!我不知道:0表示连接是通过套接字完成的。我一直认为它只是localhost:0的简写。
Andreas Raster

我在Windows和Xming的Ubuntu上使用Bash遇到了同样的问题,这解决了!我只需要将DISPLAY设置为即可localhost:0
本·理查兹

知道为什么DISPLAY=:0在WSL + XMing上可以正常运行xeyes,但不能运行ssh -X吗?ssh -X解释$ DISPLAY 是否与其他本地X11客户端不同?其他X11客户端会自动回退到,localhost:0ssh -X不会吗?
Markus Kuhn

man X它说,在显示空的主机名=:0的意思是“最有效的地方交通将被选择。” 那么ssh -X相比说可能是使用不同的算法来做到这一点xeyes
马库斯·库恩

@MarkusKuhn也许WSL + Xming与Cygwin + Xming不同。我看到我现在正在使用DISPLAY=:0ssh -X愉快地转发它。
roaima

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.