在 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 连接。