首先我想做的是:
我想通过 登录到服务器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
我找到了一些关于这个问题的文章。
因此将/etc/pam.d/su
文件和/etc/pam/sudo
文件扩展为
session optional pam_xauth.so
后来我改变了/etc/ssh/sshd_config
添加:
X11Forwarding yes
并通过 重新启动 sshd systemctl restart ssh.service
。ssh -T
说x11forwarding yes
但一切都没有改变。
有人知道该怎么办吗?进行更改后检查用户程序配置的某些更改非常重要。
答案1
由于许多人会带着相同的错误消息来到这里,但没有意识到它与 的使用无关su
,我想指出,现在由于非常不同的原因而出现类似的症状:
任何使用 Snap 安装的东西都无法工作。因此xeyes
和xclock
可能会起作用,但新安装的 Ubuntuchromium-browser
或firefox
在 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 配置。