“ su”错误,“由于身份验证错误而拒绝了X11连接”


52

以root用户身份,我连接到远程主机以执行命令。只有“ standarduser”具有适当的ID文件和正确的.ssh / config,因此我首先切换用户:

su standarduser -c 'ssh -x remotehost ./remotecommand'

该命令运行正常,但是尽管我使用了“ -x”(禁用X11-Forwarding)并在中禁用了X11Forwards /etc/ssh/ssh_config,但仍然收到错误消息:

X11 connection rejected because of wrong authentication.

当我以“ standarduser”身份登录时,未收到错误消息。

这很烦人,因为我想将命令集成到cron作业文件中。我知道该错误消息是指对根.XAuth文件的错误身份验证,但是我什至没有尝试通过X11连接。

为什么“ ssh -x”不禁用X11连接并抛出错误消息?

更新:该消息仅在我登录屏幕时显示,在本地计算机本身(不带屏幕)上使用上述命令时显示,我不会收到错误消息,因此使用cron也应该没问题。

我还使用了相同的命令-v,甚至在SSH发出状态信息之前,都意外收到了错误消息FIRST:

root@localhost:~# su standarduser -c 'ssh -x remotehost ./remotecommand'
X11 connection rejected because of wrong authentication.
OpenSSH_6.2p2 Ubuntu-6ubuntu0.1, OpenSSL 1.0.1e 11 Feb 2013

这导致我自己出现问题,不是引发ssh错误消息的原因是su

root@localhost:~# su standarduser -c 'echo Hi'
X11 connection rejected because of wrong authentication.
Hi

为什么我只收到此错误screen?如何禁用此错误消息?


再次运行命令并添加-v到ssh选项,然后将输出粘贴到您的问题中。
珍妮·D

Answers:


79

好像你根本缺乏一些X11 魔法饼干.Xauthority,你的standarduser了。这是解决此问题的方法。

简短版本(感谢@bmaupin

standarduser@localhost:~$ xauth list | grep unix`echo $DISPLAY | cut -c10-12` > /tmp/xauth
standarduser@localhost:~$ sudo su
root@localhost:~$ xauth add `cat /tmp/xauth`

注意:检查反引号!它们不能用引号代替!您需要sudo安装才能继续执行第二条命令!

原始长版

要解决问题,请首先检测哪个显示号standarduser使用:

standarduser@localhost:~$ echo $DISPLAY
localhost:21.0

在这种情况下是21.0。其次,显示standarduserCookie的列表:

standarduser@localhost:~$ xauth list
localhost/unix:1  MIT-MAGIC-COOKIE-1  51a3801fd7776704575752f09015c61d
localhost/unix:21  MIT-MAGIC-COOKIE-1  0ba2913f8d9df0ee9eda295cad7b104f
localhost/unix:22  MIT-MAGIC-COOKIE-1  22ba6595c270f20f6315c53e27958dfe
localhost/unix:20  MIT-MAGIC-COOKIE-1  267f68b51726a8a381cfc10c91783a13

用于21.0显示的cookie 是列表中的第二个,并以结尾104f

最后要做的是将这个特定的cookie添加到根目录中.Xauthority。以root用户身份登录并执行以下操作:

root@localhost:~$ xauth add localhost/unix:21  MIT-MAGIC-COOKIE-1  0ba2913f8d9df0ee9eda295cad7b104f

X11 connection rejected because of wrong authentication当您su以其他用户身份在Bash脚本或中运行时,这是可以减轻错误的方法screen

感谢这个人的启发。


有趣。我尝试过,但这对我也不起作用。在我的特定情况下,我几乎可以启动任何东西(另一个xterm,VirtualBox),但是我不能启动gedit(我得到相同的错误)。但是,如果我更改为root,则可以启动gedit。我遵循了这封信的指示,但什么也没有。还有些其他问题。
luis.espinal 2014年

@ luis.espinal希望有人为您的特定问题提供解决方案。
TranslucentCloud

1
长版本的工作原理很吸引人,但是短版本在centos上出错,并带有“ xauth:(argv):1:错误的“ add”命令行”
Sam Sam

1
简短版在centos 7上为我工作
tdc 2015年

1
在Ubuntu 18.04.1短版上运行良好。
Simakis Panagiotis

38

一个更简单的解决方案:

1.- ssh user@host

2- $ sudo su

3.- # xauth merge /home/user/.Xauthority

就这样

当然$DISPLAY必须设置变量。


1
这听起来很有希望,但有点不完整。您介意添加有关如何精确设置$DISPLAY变量的信息吗?我相信这小小的补充会给您的答案带来更多的声音。
2015年

这对我有用,而@TranslucentCloud的答案却没有。我最初在尝试从命令行FYI以root身份运行Android SDK管理器时遇到问题。
scottyseus

2
从那时起,这对我来说是xauth: file /root/.Xauthority does not exist
无法解决的

2
tdc,这只是警告,而不是错误,xauth将创建文件-如果您第二次运行该命令,则看不到它。
弗拉基米尔·潘捷列夫(Fladimir Panteleev)

1
只需复制和粘贴,谁需要学习任何内容!谢谢!更简单。
塞伦斯(Sirens)

7

我的需求略有不同,因此我想出了一个略有不同的解决方案。我需要能够以其他用户身份(不是root用户)运行X11应用程序。运行CentOS,所以我没有像ubuntu这样的幸运狗拥有的出色的gksudo工具,它具有Xauth的魔力。

我真的不想破坏一些自定义脚本,只是为了登录,切换用户和运行应用程序。对我来说似乎有点多余。

第一步:

允许$​​ XAUTHORITY跨sudo会话传送。

在/ etc / sudoers中的其余env_keep语句下添加以下行:

Defaults    env_keep += "DISPLAY XAUTHORIZATION XAUTHORITY"

第二步:

允许目标用户读取您的.Xauthority(是的,我知道,尖叫SECURITY!所有您想要的)。对于只希望以root用户身份运行命令的用户,可以跳过此操作。

目标用户与我共享同一组,因此我只打开了组读取权限:

$ chmod g+r user ~/.Xauthority

第三步:

默认情况下,CentOS不会填充$ XAUTHORITY的值。在个人资料中添加一行(我的是〜/ .bash_profile):

export XAUTHORITY=$HOME/.Xauthority

而已。没有更多的调整。无需编写.XML即可使PolicyKit正常工作。每次登录都没有运行脚本。无需两次复制sudo即可。从这里开始,您可以简单地:

$ sudo -u user xcalc

与MobaXTerm完美兼容。


这正是我解决在CentOS 7上获得VM控制台时遇到的问题所需的东西。实际上,我只需要按照我的目的执行第三步(当然,请确保在/ etc /中将X11Forwarding设置为yes)。 ssh / sshd_config)。谢谢。
darklion

太棒了!这就是答案!感谢@W史密斯
tmow


0

因为我经常以根压缩的网络文件共享为根,所以上述解决方案都不适合我。(xubuntu 14.04)。我整理了以下脚本,该脚本可在我的系统上运行。它可能对您有用。再说一次,可能不会,但是可以免费尝试...

假设我已经使用-Y选项。

#!/bin/bash  
if [[ $DISPLAY =~ localhost(:[[:digit:]]+) ]] ;then
    port=${BASH_REMATCH[1]}
else
    echo "Unexpected DISPLAY $DISPLAY"
    exit 1
fi
h=$(hostname)
cookie=$(xauth list|grep $h.*$port)
sudo -i xauth -i add $cookie
sudo -i $*

cookie=$(xauth list|grep $h.*$port)如果$ port恰好是cookie值的一部分,则该行可能比预期的要匹配。更安全的是:cookie=$(xauth list) cookie=${c%% *}cookie=$(xauth list |grep $h[^ ]*$port)
PePa

0

就我而言,遇到该错误时,我有一个加密的用户目录。调用后ecrypt-mount-private,它消除了错误,并允许我继续X11转发。

要确定您的个人文件夹进行加密,你可以试试这个(按照这个答案): ls -A /home。如果您看到一个.ecryptfs文件夹,则您的主目录可能已加密,在这种情况下,您可以尝试执行我在答案开头输入的命令。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.