MacOS 上正确设置 xauth

243 阅读2分钟

介绍

xauth 是 X Display Server 用来授权给 X GUI clients 访问的授权程序 ,它安装在 X Display Server 所在的 Host 上。

比如,远端的 Linux 服务器运行 X GUI Client,本地的 Host 主机提供 GUI display(作为 X Server),那么本地的 Host 主机就需要安装 xauth。

如果本地的 Host 主机是 macOS,那么安装 XQuartz 时,会自动安装 xauth,其位置是 /opt/X11/bin/xauth。当我们在 macOS 上运行 SSH client 连接远程 Linux 主机时,SSH client 会自动在标准目录中找 xauth 程序,并调用 xauth 程序对远程 Linux 主机鉴权(授权条目保存在 macOS 端的 ~/.Xauthority 中)。如果这时 macOS 端提示找不到 xauth,这时因为 xauth 所在的位置 / opt/X11/bin/xauth 并不是 SSH 的标准搜索目录,所以才提示找不到。

ssh daemon 默认使用的是系统 PATH 进行搜索(比如 /usr/bin, /bin, /usr/sbin/sbin),也就是说,xauth 如果不在这些目录中就会提示找不到。

Warning: No xauth data; using fake authentication data for X11 forwarding.

解决方法:

我们可以做一个软连接到系统目录

ln -s /usr/bin/xauth /opt/X11/bin/xauth

或者,也可以在 ssh client 的配置文件中添加路径信息。

~/.ssh/config

HOST * 
    XAuthLocation /opt/X11/bin/xauth

这样,当我们在 macOS 上执行 ssh ublab -Y 命令时,ssh 就能找到 xauth 这个程序了。

ssh ublab -Y

扩展

~/.Xauthority 中保存的是 magic cookie,它被 X Display Server 用来验证 client,在本机(macOS) 由 xauth 生成之后,会在 ssh client 连接远程主机时被自动拷贝到远程主机上的 ~/.Xauthority 中,然后 远程主机上的 X Client 在请求连接 X Display Server 时会带上其中的 cookie,xauth 拿到该 cookie 之后,与本机上 ~/.Xuathority 中查找相应的记录,如果找到,那么就通过验证。

全文完!

如果你喜欢我的文章,欢迎关注我的微信公众号 deliverit。