从 XForwarded 服务器使用 Sudo 和 Gedit 失败

从 XForwarded 服务器使用 Sudo 和 Gedit 失败

centos服务器和ubuntu主机都安装了gedit。 root 登录服务器被阻止,只有用户可以通过 rsa 密钥通过 SSH 登录。

当我登录服务器时-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?

答案1

您可以改用该sudoedit命令。

EDITOR=gedit sudoedit filename.txt

其作用是获取文件的副本,然后像您一样运行编辑器,然后如果它检测到文件已更改,则将结果复制回来。

在大多数情况下具有相同的效果,sudo gedit filename.txt但它以非特权方式运行编辑器,因此您的 X 转发应该仍然有效。

答案2

只是为了提供一个解释,当您运行时,sudo它会重置很多环境变量,包括$HOME重置为 root 的 HOME (/root可能)。当您运行 X11 程序时,它需要一个 XAUTHORITY magic cookie 来允许它连接到 DISPLAY。当您连接时,适当的 cookie 将被放置ssh -X~/.Xauthority遥控器上。

但是在 sudo 之后,你的 X11 程序将查看/root/.Xauthority,因此不会得到 cookie,或者是旧的、过时的 cookie。

因此错误的认证您看到的消息。在 sudo 后有几种保留或恢复的解决方案,但对于您的特定情况,最明智的做法是像其他答案一样$HOME使用。sudoedit

相关内容