来自远程计算机的 X 隧道问题

来自远程计算机的 X 隧道问题

我正在尝试隧道 X 窗口。如果做:

user@local: ssh -X user@remote  xclock

有用。但是,如果我先登录到机器然后启动程序,它就会失败。

user@local: ssh -X user@remote

user@remote: xclock
No protocol specified
Error: Can't open display: :0

什么地方出了错?

编辑

我检查了$DISPLAY遥控器上的变量:

user@local: ssh -X user@remote "echo $DISPLAY"
:0.0

登录后在远程将其设置为相同的值不起作用。按照建议设置$DISPLAY即可。:10.0

user@local: ssh -X user@remote
user@remote: DISPLAY=:10.0 xclock

我仍然不明白为什么交互式和非交互式会话需要不同的 $DISPLAY 值。

答案1

检查变量展示正确设置为本地主机:10.0。如果不是,

export DISPLAY=localhost:10.0 

,然后尝试时钟再次。

但为什么我需要“DISPLAY”为 10.0 而不是 0.0?

X服务器(或者X窗口, 或者X11)正是这样,一个服务器,等待应用程序连接到它以显示它们。这发生在您的电脑上,其中应用程序通过位于以下位置的套接字连接到 X 服务器:/tmp,通常称为/tmp/.X11-unix。然而,像所有服务器一样,X11可以从远程电脑进行联系,并以图形方式显示在远程电脑上运行的应用程序。

然而,这种能力带来了许多安全风险,因此向远程应用程序开放 X11 服务器非常困难(您需要在不同的配置文件中指定相同的选项至少 3 次)。

现在输入SSH,这反而使这变得安全:它是-Y/-X的选项SSH它安全地(也通过加密流量)处理向远程应用程序打开本地 X11 服务器的所有细节。但是,当您想要显示偏僻的如果您在本地使用 xclock,您必须指示远程应用程序要联系的 X11 服务器不是它自己的 X11 服务器,而是远程计算机上的服务器(您启动该服务器的那台计算机)SSH会议)。所以时钟必须发送其输出不是到本地套接字/tmp但到一个网络端口(它是127.0.0.1:6010, 哪个SSH仁慈地缩短为本地主机:10), 从中SSH将负责将其发送回您的本地电脑,最终以图形方式显示输出。

如果您不喜欢将不同的 ssh 连接(您可能有多个)分隔开10单位,如本地主机:10.0,本地主机:20.0,...)你应该改变声明

X11DisplayOffset 10

/etc/ssh/sshd_config无论你喜欢什么(尽管说实话,我看不出有任何理由)。

正是这个语句导致远程显示可用不是在港口6000(这将是本地主机:0.0),但在端口上6010。你可以自己检查一下:

$ ssh -Y vps
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon Apr 17 02:47:42 2017 from 
root@vps:~# ss -lntp | grep 6010
LISTEN     0      0                 127.0.0.1:6010                     *:*      users:(("sshd",16172,8))
LISTEN     0      0                       ::1:6010                    :::*      users:(("sshd",16172,7))

相关内容