如何配置 ssh 以允许在 DISPLAY 变量中指定主机名/IP?

如何配置 ssh 以允许在 DISPLAY 变量中指定主机名/IP?

我有一个旧应用程序试图在 CentOS6 上运行,它使用几台机器:abc1 和 abc2。

我登录到 abc1 并运行该应用程序,该应用程序通过 ssh 连接到 abc2,将变量更改DISPLAYabc1:0.0并运行一个尝试在 abc1 上打开新窗口的进程。但是,它失败了:cannot open display

如果我只执行ssh -X abc2or ssh -Y abc2,我可以毫无问题地打开 xterm,但 DISPLAY 变量设置为类似localhost:10.0

请注意,abc1 正确解析(我可以从 abc2 ping abc1)

我根本无法修改应用程序,因此无法控制它DISPLAY正在使用的变量。但是,我可以修改 abc1 和 abc2 的配置。我在一个孤立的网络上,不关心安全性。

ssh 配置中是否有某些内容或其他我可以更改以允许abc1:0.0工作的内容?

答案1

如果您在本地登录到abc1,这可能与您无关...但是如果您使用 SSH X11 转发从工作站连接到abc1,那么您也可以启动嵌套X服务器捕获abc1传入连接abc1:0.0并将其传递到安全 SSH X11 隧道内工作站的本地 X 服务器。

在 RHEL/CentOS 6 上,所需的 RPM 软件包是 或xorg-x11-xserver-Xnestxorg-x11-xserver-Xephyr较新的实现,可能性能更好)。

基本上:

  • 让常规 X 服务器处于abc1不侦听 TCP 连接的默认状态
  • 在您的工作站上运行本地 X 服务器
  • 建立从您的工作站到的 X11 转发 SSH 连接abc1
  • 启动XnestXephyr在后台使用abc1适当的选项让他们收听abc1:0.0
  • 开始您的应用程序。

参考 @roaima 对这个问题的评论:即使使用旧的 X 应用程序,在应用程序中对 DISPLAY 设置进行硬编码始终是一件极其令人讨厌的事情。

DISPLAY 变量很可能被设置在可配置的地方。例如,它可能在用于运行应用程序的用户帐户的登录脚本中指定。但是,如果修改算作修改应用程序,那么您将必须使用建议的解决方法。

答案2

简要解释发生的情况:

X 转发 viassh在远程计算机 (abc2) 上创建本地 X 协议套接字,就像远程计算机上的 X 服务器一样,然后通过 ssh 隧道将 X 线协议转发到原始计算机 (abc1)。本地套接字被标识为localhost:10.0

OTOH,abc1:0.0显示器使用旧的 X 网络协议,并期望 abc1 上的 X 服务器侦听正确的端口。在现代系统上默认情况下禁用此功能,因为它非常不安全。

因此,如果您的情况确实希望在 abc2 上运行的应用程序使用在 abc1 上运行的 X 服务器,最简单的方法是在 abc1 上启动 X 服务器,而不使用该-nolisten选项。为此,您必须找出 X 服务器是如何启动的(通常由显示管理器,例如 xdm/gdm/kdm/lightdm),并修改启动调用。

接下来您要做的就是启用访问控制。在隔离网络上,只需使用xhost +并允许所有连接即可;否则你可以使用xauth并添加当前的 MIT magic cookie。详细信息在一定程度上取决于 X 服务器在您的计算机上的配置方式。

相关内容