Xorg / X11:如何使用 xauth 提供基于 Cookie 的 X 服务器访问?

Xorg / X11:如何使用 xauth 提供基于 Cookie 的 X 服务器访问?

我知道风险,我知道有 ssh -X 等等。我想要的是能够从一台远程机器(X 客户端)基于用户(cookie)连接到我的本地机器(X 服务器)。

我知道任何使用我的 cookie 的会话~/.Xauthority都可以连接到我的 X 服务器(从)因此,场景如下:

本地机器(X 服务器):

$ xauth nlist
<a bunch of numbers>
$ xauth nextract xauth-extracted :0
$ cat xauth-extracted | ssh user@<X client IP> xauth nmerge -

远程机器(X 客户端):

$ xauth nlist
<2 bunches of numbers, the second one is identical to the one from my X server machine>

$ export DISPLAY=<X server IP>:0

$ xeyes
No protocol specified
Error: Can't open display: <X server IP>:0

在 X 服务器机器上,只要我允许我的 X 客户端 IP 主机$ xhost +<X client IP>并再次运行xeyes,它就会在 X 服务器上正常打开。但我不想允许所有用户,只允许持有我的 xauth cookie 的用户。我做错了什么?

编辑:我意识到提取:0并合并到另一台主机,然后列出 cookie 会给我:

$ xauth list
<X server hostname>/unix:1  MIT-MAGIC-COOKIE-1  <hex key - the same as my X server hex key>

我不太清楚那/unix里面的意思(我在某处读到过 unix 套接字)但似乎与此有关。

为了让它工作,我在 X 客户端上打开了与任何主机的 X 连接,xhost +并与我运行的 X 服务器建立连接xauth generate <X server IP>:0 .。连接到 X 服务器并下载的不是 cookie,而是相关的 (?) cookie,现在当我列出 cookie 时,它​​显示:

$ xauth list
<X server hostname>:0  MIT-MAGIC-COOKIE-1  <another hex key>

现在它可以“工作”了,但是:

  1. 几分钟后它又停止工作了
  2. 如果从同一台机器,我为另一个用户生成一个 cookie,则第一个 cookie 会停止工作

当他们停止工作时,他们会说:

$ xclock
Invalid MIT-MAGIC-COOKIE-1 keyError: Can't open display: <X server IP>:0

有人能告诉我有关 xauth 的好资源吗?

答案1

xauth 条目需要有正确的主机名 - 它需要与 $DISPLAY 中的内容相匹配 - 否则 Xlib 客户端根本无法找到它。

正如你所注意到的,当地的xauth 条目仅具有系统主机名 + /unix,并且每当客户端拥有没有主机的 $DISPLAY 时就会选择它,因此它们通过本地套接字(位于 /tmp/.X11-unix/X0)进行连接。

但是,远程客户端被告知要连接到<X server IP>:0,因此 xauth 条目显然不再匹配。他们希望 xauth 条目对应于在 $DISPLAY 中找到的地址,即<X server IP>:0

这意味着您无法轻松使用 nextract/nmerge(除非您编辑提取数据中的“主机名”字段);对于一次性实验,手动复制和粘贴 cookie 会更容易:

xauth add "$DISPLAY" MIT-MAGIC-COOKIE-1 <hex key>

答案2

只是为了让命令更加清晰xauth generate。它基于man xauth以下参数:

generate displayname protocolname [trusted|untrusted]
           [timeout seconds] [group group-id] [data hexdata]

在哪里

超时选项指定此授权的有效时间(以秒为单位)。如果授权未使用(没有客户端与其连接)的时间超过此时间段,则服务器将清除该授权,并且将来使用该授权进行连接的尝试将失败。请注意,服务器执行的清除操作不会从授权文件中删除授权条目。默认超时为 60 秒。

并基于第 186 页的示例克里斯·泰勒 (Chris Tyler) 著《X Power Tools》一书要创建没有过期时间的 cookie,您应该将超时设置为 0,即

xauth generate <X server IP>:0 . timeout 0

您应该注意到,不受信任的 cookie 允许运行软件加速的 X 应用程序,但无法访问硬件加速,并出现如下错误:

ubuntu@mycontainer:~$ glxdemo
Error: couldn't get an RGB, Double-buffered visual

也许可以通过以下方式绕过虚拟LG软件,但尚未经过检查(与已回答的问题无关)

相关内容