ssh 会话中的 XAUTHORITY 环境变量为空

ssh 会话中的 XAUTHORITY 环境变量为空

当我输入到 Linux 主机的 SSH 连接时,XAUTHORITY 环境变量未设置。如果我运行sudo -b,连接将被丢弃,除非我nohup立即添加命令,在这种情况下操作失败,报告X11 connection rejected because of wrong authentication.

作为解决方法,我可以手动将该值设置为$HOME/.Xauthority

该变量通常是自动设置的。我应该怎么做才能确保以首选方式设置变量(在正确的时间通过正确的流程)?

答案1

如果 Xauthority 文件位于$HOME/.Xauthority,那么您不需要XAUTHORITY环境变量,因为$HOME/.Xauthority是默认路径:X11 库应该自动检查它。

如果您随后使用sudo切换到 root,那么通过 维护 X11 会话访问将变得更加困难sudo,因为它不再只是保留DISPLAYXAUTHORITY环境变量并让 root 用户从任何位置读取 Xauthority 的问题:在某些时候需要设置 XAUTHORITY 值来标识 Xauthority 文件的实际位置。如何设置它并不重要,只要在需要它的进程启动之前设置它即可。

如果sudo已配置为保留变量,那么您可以通过在登录脚本中显式设置(如之前的原始用户帐户)XAUTHORITY来解决此问题(如果已设置),如下所示:XAUTHORITYsudoDISPLAY

if [ "$DISPLAY" != "" ] && [ "$XAUTHORITY" = "" ]; then
    export XAUTHORITY=$HOME/.Xauthority
fi

或者,如果sudo不保留XAUTHORITY和/或您不希望配置sudo保留它,您可以将以下代码片段放入/etc/bash.bashrc~/.bashrc(或由命令启动的 shell 执行的任何脚本sudo)中。

if [ "$SUDO_USER" != "" ] && [ "$DISPLAY" != "" ]; then
    export XAUTHORITY=$(getent passwd "${SUDO_USER}" | cut -d : -f 6)/.Xauthority
fi

相关内容