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

abe*_*igo 23 ssh x11

我在 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
Run Code Online (Sandbox Code Playgroud)

如果我改为使用 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
Run Code Online (Sandbox Code Playgroud)

yae*_*shi 24

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

export DISPLAY=127.0.0.1:0
ssh -X marko@vm
Run Code Online (Sandbox Code Playgroud)

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

set DISPLAY=127.0.0.1:0
ssh -X marko@vm
Run Code Online (Sandbox Code Playgroud)

  • 这个解决方案对我不起作用。`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)。 `使用`set DISPLAY=` 取消设置环境变量允许我再次成功ssh,但不进行X 转发。设置 DISPLAY 会导致软件以这种方式询问我的密码对我来说没有任何意义。https://github.com/PowerShell/Win32-OpenSSH/issues/1088 https://github.com/PowerShell/Win32-OpenSSH/issues/1088 (6认同)
  • 所以roaima的回答解释了问题发生的原因,但是并没有帮我解决问题。我在我的问题中解释说我正在运行 Windows。yaegashi 的回答给了我一个命令,可以在解决我问题的 Windows 上输入。这就是我选择这个答案的原因。 (3认同)

roa*_*ima 17

当您运行时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
Run Code Online (Sandbox Code Playgroud)

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

$ export DISPLAY=localhost:0
$ ssh -X remotehost xlogo
Run Code Online (Sandbox Code Playgroud)

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

Xming.exe :0 -clipboard -multiwindow
Run Code Online (Sandbox Code Playgroud)

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

$ netstat -na | grep ':6000 .*LISTEN'
  TCP    0.0.0.0:6000           0.0.0.0:0              LISTENING
Run Code Online (Sandbox Code Playgroud)

  • 在 `man X` 上,它表示 DISPLAY=:0 中的空主机名意味着“将选择最有效的本地传输”。那么与“xeyes”相比,“ssh -X”可能使用不同的算法来做到这一点? (2认同)

小智 10

这对我有用:在 PowerShell 中设置环境变量:

$env:DISPLAY="127.0.0.1:0"
Run Code Online (Sandbox Code Playgroud)

然后 ssh -Y