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 配置。

相關內容