X11
使用帶有 Gedit 的 Sudo 從 XForwarded 伺服器失敗
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
在其他答案中使用是最明智的。