为什么不能将 DISPLAY 设置为主机名?

为什么不能将 DISPLAY 设置为主机名?

在 CentOS 6.7 上,当我ssh从本地工作站进入远程主机并使用主机名或 IP 地址将 DISPLAY 环境变量设置为工作站时,我无法打开任何 X 显示。

例子:

$ ssh -Y host1
$ export DISPLAY=ws1:0.0    # workstation hostname=ws1
$ xeyes
Can't not open display 

然而,以下工作。

$ ssh -Y host1
$ echo $DISPLAY
localhost:10.0
$ xeyes           # works as expected

当我使用主机名设置 $DISPLAY 时,是什么阻止了 X-display 工作?

答案1

由于严重的安全问题,现在通常禁止远程访问 X 服务器。

防火墙和/或 X 服务器设置会阻止这些连接成功。

然后,仅允许本地和 Unix 域套接字连接,因此仅本地主机:服务器[.显示]或者根本没有主机服务器[.显示]是可用的设置。

要确定您的 X 服务器是否正在侦听 TCP 端口,您可以运行以下命令并查看 X 服务器(或 ssh,如果是隧道)是否使用 6000+ 范围内的端口显示:

$ sudo netstat -anp|grep -w LISTEN

如果您的服务器仅侦听 unix 绑定套接字,则将使用以下命令显示lsof

$ sudo lsof -p $(pgrep Xorg)

这些线代表 unix 套接字:

Xorg    1874 root   21u     unix 0xffff8800d5db4000      0t0      21169 @/tmp/.X11-unix/X0 type=STREAM

要识别侦听 TCP 端口的所有进程,您可以运行以下命令:

$ sudo lsof -P | grep -w LISTEN

例如,以下是监听 TCP 端口 22 的 ssh 守护进程:

sshd 1032 root 4u IPv6 22727 0t0 TCP *:22(监听)

答案2

如果本地 X 服务器是 X 服务器的相当现代的版本Xorg,则默认情况下它不接受直接网络连接。要启用此功能老旧且根本没有安全感访问方法,您需要修改用于启动 X 服务器的命令行以包含该-listen tcp选项。

较旧的发行版默认情况下会使用该选项启动 X 服务器-nolisten tcp,并且要启用旧式不受保护的网络访问,您需要从 X 服务器命令行中删除该选项。

我认为大多数主要的 Linux 发行版在 2000 年之前就开始默认阻止不受保护的 X11 连接。

相关内容