X11 连接因身份验证错误而被拒绝

And*_* A. 7 pam su sudo x11 xauth

首先我想做的是:

我想通过 登录到服务器ssh。然后更改更改用户通过sudo su user并在我的屏幕上启动一些应用程序。

有些同事这样做

su user
export DISPLAY=<IP>:0

Run Code Online (Sandbox Code Playgroud)

它有效。


我通过连接到服务器ssh -X user@server。然后我启动一个 X11 应用程序。这工作正常(尽管有警告)。

警告:

libEGL warning: DRI3: failed to query the version
libEGL warning: DRI2: failed to authenticate
qt.qpa.xcb: QXcbConnection: XCB error: 1 (BadRequest), sequence: 414, resource id: 1897, major code: 155 (Unknown), minor code: 1
Run Code Online (Sandbox Code Playgroud)

如果我运行sudo su(或sudo su user) 并启动程序或通过运行它,sudo myprogram则会出现错误。

错误:

X11 connection rejected because of wrong authentication.
qt.qpa.xcb: could not connect to display localhost:11.0
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
    This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb.

Aborted
Run Code Online (Sandbox Code Playgroud)

我找到了一些关于这个问题的文章。

切换用户时X11转发失败

ssh 连接。X11 连接因身份验证错误而被拒绝


因此将/etc/pam.d/su文件和/etc/pam/sudo文件扩展为

session  optional  pam_xauth.so 
Run Code Online (Sandbox Code Playgroud)

后来我改变/etc/ssh/sshd_config了添加:

X11Forwarding yes
Run Code Online (Sandbox Code Playgroud)

并通过 重新启动 sshd systemctl restart ssh.servicessh -Tx11forwarding yes

但一切都没有改变。

有人知道该怎么办吗?进行更改后检查用户程序配置的某些更改非常重要。

Hea*_*ery 19

由于许多人会带着相同的错误消息来到这里,但没有意识到它与 的使用无关su,我想指出,现在由于非常不同的原因而出现类似的症状:

任何使用 Snap 安装的东西都无法工作。因此xeyesxclock可能会起作用,但新安装的 Ubuntuchromium-browserfirefox在 Ubuntu 上则不会。

解决方法很简单:export XAUTHORITY=$HOME/.Xauthority在运行远程 X11 应用程序之前。


Ned*_*d64 2

不安全的选项:

在登录的主机上执行

xhost +
Run Code Online (Sandbox Code Playgroud)

或者,只是更安全一点

xhost <IP you want to log in to>
Run Code Online (Sandbox Code Playgroud)

这将允许来自远程主机的连接。

为什么这是不安全的?该主机上的任何程序和用户(或任何主机上的任何程序/用户,带有xhost +)都将能够访问您的屏幕并读取您执行的计算机上的所有按键xhost

更安全的选择:

将 X11 服务器的授权密钥添加到远程计算机:

在本地计算机上,列出必要的“magic cookie”:

# xauth list
hostname/unix:0  MIT-MAGIC-COOKIE-1  0123456789abcdef0123456789abcdef
Run Code Online (Sandbox Code Playgroud)

在远程计算机上,将机密添加到您的~/.Xauthority文件中,最简单的方法是xauth

# setenv DISPLAY <ORIGIN_IP>:0
# xauth add <ORIGIN_IP>:0 MIT-MAGIC-COOKIE-1 0123456789abcdef0123456789abcdef
Run Code Online (Sandbox Code Playgroud)

请注意,这些机器之间的 X11 协议数据仍未加密,因此容易受到攻击。