
首先我想做的是:
我想透過 登入伺服器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 配置。