ssh 和 sudo 但没有 $DISPLAY

elb*_*rna 7 ssh xorg xforwarding x11

通常我在 ssh 上执行此操作以获得 X 应用程序使用 sudo su

ssh -X server
Run Code Online (Sandbox Code Playgroud)

登录

xauth list $DISPLAY
Run Code Online (Sandbox Code Playgroud)

回到我身边

server/unix:10  MIT-MAGIC-COOKIE-1  blablablablabla
Run Code Online (Sandbox Code Playgroud)

然后我做

sudo su
xauth add server/unix:10  MIT-MAGIC-COOKIE-1  blablablablabla
Run Code Online (Sandbox Code Playgroud)

在运行 X 应用程序之后..我明白了,它是正确的。

问题是在 Centos7 上,我做

xauth list $DISPLAY
Run Code Online (Sandbox Code Playgroud)

它什么都不返回。我尝试添加麻省理工学院给出的魔法饼干

xauth list
Run Code Online (Sandbox Code Playgroud)

但当然它不起作用。通过 ssh 进行正常的 X 转发,无需 sudo 工作。

3台服务器上sshd的设置是一样的:

  1. slackware WORKS
  2. HPUX WORKS
  3. centos7 不工作

Zeu*_*eus 7

另一种解决方案是将当前用户的.Xauthority 文件与root 用户的.Xauthority 文件合并。

  1. ssh user@host
  2. 更改 .Xauthority 文件权限,以便 root 也可以访问它。
  3. sudo su - root
  4. xauth merge /home/users/user/.Xauthority

测试

gedit somefile.log
Run Code Online (Sandbox Code Playgroud)

它应该打开一个 gedit 窗口。


小智 7

要使解决方案永久存在,您可以修改.bashrc登录用户的文件添加

if [ -z "$XAUTHORITY" ]; then
    export XAUTHORITY=$HOME/.Xauthority
fi
Run Code Online (Sandbox Code Playgroud)

此外,您必须更新sudoers文件添加行

Defaults env_keep+="DISPLAY XAUTHORITY"
Run Code Online (Sandbox Code Playgroud)

如果 root 对登录用户的.Xauthority文件具有读取权限,您将能够使用 X 应用程序。


elb*_*rna 5

找到解决方案。从本博客复制的替代方法 使用此脚本

userfirst=sshloginuser
usersecond=sudoorsuuser

$usersecond@host$

    su - $userfirst -c 'xauth list' |\
         grep `echo $DISPLAY |\
             cut -d ':' -f 2 |\
             cut -d '.' -f 1 |\
             sed -e s/^/:/`  |\
         xargs -n 3 xauth add
Run Code Online (Sandbox Code Playgroud)

或者只是以 user1 身份登录

xauth list
Run Code Online (Sandbox Code Playgroud)

su 或 sudo su user2

xauth add OUTPUTOFXAUTHLIST
Run Code Online (Sandbox Code Playgroud)