我在 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
你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
或者,如果您使用的是 powershell.exe:
$env:DISPLAY = '127.0.0.1:0'
ssh -X marko@vm
答案2
当您运行时ssh -X remotehost
,您将被DISPLAY=localhost:10
呈现给远程主机。ssh
侦听该端口并将流量转发回调用系统,使用其原始值来DISPLAY
确定服务器地址。
您的本地系统上可能存在DISPLAY=:0
。如果没有,则默认为 。这指示本地系统使用 UNIX 域套接字与显示器通信。不幸的是,Xming
Windows 上没有设置该 UNIX 域套接字,因此您的ssh
X11 转发会失败并出现以下错误:
$ 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
答案3
这对我有用:在 PowerShell 中设置环境变量:
$env:DISPLAY="127.0.0.1:0"
然后ssh -Y
答案4
在 Powershell 中运行以下命令:
setx 显示“本地主机:0.0”
之后重新启动powershell(非常重要!)
使用 powershell 和 ssh -Y username@computer 进行连接
注意:确保使用 -Y 进行 ssh 启用远程图形