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

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

首先我想做的是:

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

有些同事这样做

su user
export DISPLAY=<IP>:0

它有效。


我通过连接到服务器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

如果我运行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

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

切换用户时X11转发失败

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


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

session  optional  pam_xauth.so 

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

X11Forwarding yes

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

但一切都没有改变。

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

答案1

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

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

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

答案2

不安全感选项:

在登录的主机上执行

xhost +

或者,只是更安全一点

xhost <IP you want to log in to>

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

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

更安全选项:

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

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

# xauth list
hostname/unix:0  MIT-MAGIC-COOKIE-1  0123456789abcdef0123456789abcdef

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

# setenv DISPLAY <ORIGIN_IP>:0
# xauth add <ORIGIN_IP>:0 MIT-MAGIC-COOKIE-1 0123456789abcdef0123456789abcdef

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

答案3

假设 user1 是原始用户(您知道其密码),user2 是目标用户(未知密码),我可以让它工作:

% ssh -Y user1@target-box
Password: xxxxxxxxxxxxx

user1@target-box% sudo -u user2 bash
Password: xxxxxxxxxxxxx

user2@target-box% cp  ~user1/.Xauthority  ~user2

user2@target-box% xterm &

请注意,这还假设您在帖子中阐明了正确的 sshd 配置。

相关内容