尝试通过 SSH 运行 X11:服务器拒绝连接

尝试通过 SSH 运行 X11:服务器拒绝连接


在本地 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.

相关内容