X11

使用帶有 Gedit 的 Sudo 從 XForwarded 伺服器失敗

  • September 6, 2016

centos 伺服器和 ubuntu 主機都安裝了 gedit。伺服器的 Root 登錄被阻止,只有使用者可以通過 SSH 通過 rsa 密鑰登錄。

當我使用-X作為參數提供的伺服器登錄到伺服器時,我可以像這樣使用 gedit:

gedit filename.txt &

並且文件在 gedit 中打開供我編輯和保存。但是,如果我使用 Sudo 來編輯文件,則會出現以下錯誤:

sudo gedit filename.txt &

[1] 11039
[user@server ~]$ X11 connection rejected because of wrong authentication.

** (gedit:11040): WARNING **: Could not open X display
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.

(gedit:11040): Gtk-WARNING **: cannot open display: localhost:10.0

[1]+  Exit 1                  sudo gedit filename.txt

在這種情況下如何使用 Gedit。

您可以改用該sudoedit命令。

EDITOR=gedit sudoedit filename.txt

這樣做是獲取文件的副本,然後像您一樣執行編輯器,然後如果它檢測到文件已更改,則將結果複製回來。

在大多數情況下,效果相同,sudo gedit filename.txt但它以非特權方式執行編輯器,因此您的 X 轉發應該仍然有效。

只是為了提供解釋,當您執行sudo它時會重置很多環境變數,包括$HOME重置為 root 的 HOME(/root可能)。當您執行您的 X11 程序時,它需要一個 XAUTHORITY 魔術 cookie 以允許它連接到 DISPLAY。當您連接時,適當的 cookie 將被放置ssh -X~/.Xauthority遙控器上。

但是在 sudo 之後,您的 X11 程序將查看/root/.Xauthority,因此沒有 cookie 或舊的、陳舊的 cookie。

因此,您會看到*錯誤的身份驗證消息。*在 sudo 之後有幾種保留或恢復的解決方案$HOME,但對於您的特定情況,sudoedit在其他答案中使用是最明智的。

引用自:https://unix.stackexchange.com/questions/308190