在本地 Xterm 中使用 Cygwin/X11启动命令进行 SSH:
xterm -e ssh -Y -v -l MyUser myserver.mydomain.com &
登录后,我运行
setenv DISPLAY myclient.mydomain.com:0.0
当我尝试启动 Xterm 时,出现以下信息:
Xlib:服务器拒绝与“myclient.mydomain.com:0.0”的连接
Xlib:未指定协议xterm Xt 错误:无法打开显示:myclient.mydomain.com:0.0
在另一台服务器上,无需运行 setenv 即可启动新的 xterm 窗口。
该服务器上的“echo $DISPLAY”返回“localhost:11.0”
如果我尝试在另一台服务器上使用它,我会得到以下结果:
$ setenv DISPLAY localhost:11.0
$ xterm
xterm Xt 错误:无法打开显示:localhost:11.0
我想我遗漏了一些非常基本的东西,但我不确定它是什么。
编辑:
尝试不设置$DISPLAY:
结果如下
$ echo $DISPLAY
DISPLAY:未定义变量。
$ xlogo
错误:无法打开显示:
还是行不通 :-(
再次编辑:以上内容是在直接登录时进行的。在尝试运行 xlogo 之前,我没有删除或更改 $DISPLAY
答案1
不要在远程端设置显示。通过在 SSH 上使用 -Y 参数,它将在(远程)本地端设置一个侦听器,该侦听器将隧道传输回本地端。
你应该能够做到这一点:
local$ ssh -Y user@remote
remote$ xlogo
...然后 xlogo 将会弹出。
编辑:这假设首先在本地系统上设置显示,即:
local$ xlogo
...应该在执行 ssh 之前工作,因为 ssh 只是将转发插回到原始会话认为正确的显示。这很有用,因为您可以通过多个 ssh 会话来携带显示:
local$ ssh remote
remote$ ssh further
further$ xlogo
...应该管用。
答案2
David 几乎确定了方程的一半——ssh 机制会自动设置 xauth 身份验证并定义你的显示,因此不通过自己设置 DISPLAY 变量来手动覆盖该变量。
另一个问题是,即使您礼貌地请求,目标端的一些 ssh 守护进程也配置为拒绝 X 转发。
ssh -v 会告诉您服务器是否拒绝允许 X 转发;您还可以查看 sshd_config 以查看它是否不允许 X 转发。
答案3
您必须使用 X11 R5。使用该版本,您的 X11 窗口必须在服务器上运行。然后发出以下命令 -
printenv | grep 'X11'
printenv | grep 'ssh'
如果您发现 X11 窗口正在运行,那么 -
xterm -e 'ssh remote.machine.domain
xhost + remote.machine.domain
setenv DISPLAY local.machine.domain:0.0
xterm &
当您发出上述命令时,如果 xterm 弹出 GUI,那么啊哈,您的 X11 环境已配置为使用 ssh 运行。如果没有,请检查是否安装了 X11 的最新版本。
如果这不起作用,请给我留言。我会查看日志。好的!
答案4
从man ssh
:
-X Enables X11 forwarding. This can
also be specified on a per-host
basis in a configuration file.