![Xorg / X11:如何使用 xauth 提供基于 Cookie 的 X 服务器访问?](https://linux22.com/image/1603743/Xorg%20%2F%20X11%EF%BC%9A%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20xauth%20%E6%8F%90%E4%BE%9B%E5%9F%BA%E4%BA%8E%20Cookie%20%E7%9A%84%20X%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AE%BF%E9%97%AE%EF%BC%9F.png)
我知道风险,我知道有 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>
现在它可以“工作”了,但是:
- 几分钟后它又停止工作了
- 如果从同一台机器,我为另一个用户生成一个 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软件,但尚未经过检查(与已回答的问题无关)。