使用 BASH 确定是否从 SSH 启用 X11 转发

使用 BASH 确定是否从 SSH 启用 X11 转发

通过 SSH 登录网络后,网络使用的默认 shell 是 BASH。
只有启用了 X11 转发,才可以运行使用图形的应用程序,我通常-X在登录时通过该选项执行此操作:

ssh -X [email protected]

我注意到,当启用它时,DISPLAY 环境变量存在并被设置为这样DISPLAY=localhost:11.0,但是没有什么可以阻止用户导出名为相同内容的环境变量,使其看起来好像已启用。

有没有办法从 bash shell 或 bash 脚本来确定是否启用了 X11 转发?

答案1

第一的,为什么?用户为什么要伪造 DISPLAY?尽管如此,我看到了两种解决方法:

  1. readonly DISPLAY在 bashrc/配置文件中。如果在登录时正确执行,用户之后将无法设置 DISPLAY。
  2. xset q。查询一些X11信息。如果不存在 X11 会话,则返回错误

答案2

测试DISPLAY是正确的事情。你不可能做得更好,任何变得更聪明的尝试很可能弊大于利。

是的,当然,用户可以撒谎并设置DISPLAY为不正确的值。但用户也可以关闭显示器;你永远无法保证他们会看到你展示的内容。如果用户撒谎了,你无论如何也无法知道。可以DISPLAY设置一个值,使信息显示在其他地方(通常在同一用户的另一个会话中)。相反,即使存在有效值,也可能会被DISPLAY取消设置或设置为无效值,但您无法知道该值是什么。

当然有可能DISPLAY会被设置,但你无法连接到 X 服务器。在这种情况下,有用的做法是打印一条清晰的错误消息。如果DISPLAY已设置但不可用,则表明某处配置错误,您应该将此信息传达给用户。

答案3

据我了解,您无法通过测试 DISPLAY 变量来判断,但是,在建立 SSH 会话时,有一个 SSH_CONNECTION 环境变量。 X11-Forarding 不使用 xhost,但如果 SSH_CONNECTION 变量存在并且您可以使用 xhost 而不会产生错误,那么您显然拥有一个支持 X 的连接,因此是 X11-Forwarding。

相关内容