在尝试通过 ssh 访问我的实验室中的集群时,它成功了。但后来我什么也做不了:
user@users:~> nautilus
X11 connection rejected because of wrong authentication.
Could not parse arguments: Cannot open display
或者
user@users:~> gedit
X11 connection rejected because of wrong authentication.
(gedit:151222): Gtk-WARNING **: cannot open display: localhost:11.0
它一直有效到今天......我不知道如何检查是否有变化。我没有这台机器的 root 密码,我能做些什么吗?
我已经阅读了很多有关此错误的内容,例如此,但没有解决任何问题......
编辑 :
本地操作系统为Ubuntu 16,服务器为OpenSuse。我这样连接:
ssh -XY -p22 [email protected]
编辑2:
user@users:~> env
MODULE_VERSION_STACK=3.1.6
LESSKEY=/etc/lesskey.bin
NNTPSERVER=news
INFODIR=/usr/local/info:/usr/share/info:/usr/info
MANPATH=/usr/local/man:/usr/share/man
HOSTNAME=users
XKEYSYMDB=/usr/share/X11/XKeysymDB
HOST=users
TERM=xterm-256color
SHELL=/bin/bash
PROFILEREAD=true
HISTSIZE=1000
SSH_CLIENT=10.44.0.1 49729 22
MORE=-sl
SSH_TTY=/dev/pts/2
JRE_HOME=/usr/lib64/jvm/jre
USER=user
LS_COLORS=no=00:fi=00:di=01;34:ln=00;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=41;33;01:ex=00;32:*.cmd=00;32:*.exe=01;32:*.com=01;32:*.bat=01;32:*.btm=01;32:*.dll=01;32:*.tar=00;31:*.tbz=00;31:*.tgz=00;31:*.rpm=00;31:*.deb=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.lzma=00;31:*.zip=00;31:*.zoo=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.tb2=00;31:*.tz2=00;31:*.tbz2=00;31:*.avi=01;35:*.bmp=01;35:*.fli=01;35:*.gif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mng=01;35:*.mov=01;35:*.mpg=01;35:*.pcx=01;35:*.pbm=01;35:*.pgm=01;35:*.png=01;35:*.ppm=01;35:*.tga=01;35:*.tif=01;35:*.xbm=01;35:*.xpm=01;35:*.dl=01;35:*.gl=01;35:*.wmv=01;35:*.aiff=00;32:*.au=00;32:*.mid=00;32:*.mp3=00;32:*.ogg=00;32:*.voc=00;32:*.wav=00;32:
LD_LIBRARY_PATH=/usr/local/cuda-5.5/lib:/usr/local/cuda-5.5/lib64:
XNLSPATH=/usr/share/X11/nls
ENV=/etc/bash.bashrc
HOSTTYPE=x86_64
FROM_HEADER=
MSM_PRODUCT=MSM
PAGER=less
CSHEDIT=emacs
XDG_CONFIG_DIRS=/etc/xdg
MINICOM=-c on
MODULE_VERSION=3.1.6
MAIL=/var/mail/user
PATH=/usr/local/cuda-5.5/bin:/home/user/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/usr/lib64/jvm/jre/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin
CPU=x86_64
JAVA_BINDIR=/usr/lib64/jvm/jre/bin
INPUTRC=/home/user/.inputrc
PWD=/home/user
JAVA_HOME=/usr/lib64/jvm/jre
LANG=en_US.UTF-8
PYTHONSTARTUP=/etc/pythonstart
MODULEPATH=/usr/share/modules:/usr/share/modules/modulefiles
LOADEDMODULES=
QT_SYSTEM_DIR=/usr/share/desktop-data
SHLVL=1
HOME=/home/user
LESS_ADVANCED_PREPROCESSOR=no
OSTYPE=linux
LS_OPTIONS=-N --color=tty -T 0
XCURSOR_THEME=DMZ
MSM_HOME=/usr/local/MegaRAID Storage Manager
WINDOWMANAGER=/usr/bin/gnome
G_FILENAME_ENCODING=@locale,UTF-8,ISO-8859-15,CP1252
LESS=-M -I
MACHTYPE=x86_64-suse-linux
LOGNAME=user
XDG_DATA_DIRS=/usr/share:/etc/opt/kde3/share:/opt/kde3/share
SSH_CONNECTION=172.17.10.15 22
MODULESHOME=/usr/share/modules
LESSOPEN=lessopen.sh %s
INFOPATH=/usr/local/info:/usr/share/info:/usr/info
DISPLAY=localhost:12.0
XAUTHLOCALHOSTNAME=users
LESSCLOSE=lessclose.sh %s %s
G_BROKEN_FILENAMES=1
JAVA_ROOT=/usr/lib64/jvm/jre
COLORTERM=1
_=/usr/bin/env
答案1
Xauthority 迷你操作方法
在运行 X11 显示服务器的 GNU/Linux 系统上,该文件~/.Xauthority
存储用于授权与显示器的连接的身份验证 cookie 或加密密钥。在大多数情况下,身份验证机制是对称 cookie,称为Magic Cookie
.服务器和客户端使用相同的 cookie。
每个 X11 身份验证 cookie 均受各个系统经过身份验证的用户的控制。由于身份验证 cookie 存储为纯文本安全令牌,因此文件的权限~/.Xauthority
应rw
仅适用于所有者,600
采用八进制格式。但是,不会强制执行授权文件上的权限。
用户可以使用该xauth
程序列出、导出、创建或删除身份验证 cookie。以下命令将为DISPLAY 32
.
xauth add localhost:32 - `mcookie`
使用 X11 转发时通常不需要手动创建和操作 cookie ssh
,因为ssh
在远程计算机上启动 X11 代理并在本地显示器上自动生成授权 cookie。但是,对于某些配置,可能需要手动创建授权 cookie 并将其复制到本地计算机。
这可以在会话中完成ssh
,然后用于scp
复制 cookie。
ssh
进入远程机器:
ssh -XY user@remote
检查当前 X11 显示是否存在授权 cookie
echo $DISPLAY
xauth list
如果没有命名的环境变量$DISPLAY
,则 X11 代理无法正常启动。需要注意的是,DISPLAY 0
通常是本地登录的用户,并且仅当 xserver 通过本地启动时才运行xinit
。不需要本地启动 X11 服务器即可通过 进行 X11 转发ssh
。
如果$DISPLAY
设置了环境变量,但该显示号码没有相应的授权 cookie,您可以创建一个:
xauth add $DISPLAY - `mcookie`
并验证现在是否有一个 cookie:
xauth list
您可以复制该 cookie 并将其合并到本地计算机中:
user@remote> xauth nextract ~/xcookie $DISPLAY
user@remote> exit
user@local> scp user@remote:~/xcookie ~/xcookie
user@local> xauth nmerge ~/xcookie
然后验证cookie是否已安装:
user@local> xauth list
尝试 X11 转发 ssh 连接。
注意事项~/.Xauthority
~/.Xauthority
是一个二进制文件,其中包含用户可以访问的每个显示器的所有授权信息。每个记录由两个字节分隔0x0100
。每个字段前面都有字段字节数的十六进制计数。所有文本均以十六进制 ASCII 编码。下表是 MIT MAGIC COOKIE 授权最常见配置的基本结构:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
0100 0004 61616161 0002 3435 0012 4d49542d4d414749432d434f4f4b49452d31 0010 c0bdd1c539be89a2090f1bbb6b414c2c
----------------- ----------- ------------------ ------------ ---------------------- ------------- -------------------------------------- ------------ ---------------------------------------
start-of-record 0xNumBytes 0xASCII Hostname 0xNumBytes 0xASCII Display Num 0xNumBytes 0xASCII Auth Type 0xNumBytes 0xkey
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
顶行可~/.Xauthority
通过xauth nlist
命令从文件中检索。当然,您的授权文件将包含与我的示例不同的信息。
如果安全扩展与 X11 服务器一起使用,则每个授权行都有多个配置选项,包括每个 cookie 的时间限制授权。
答案2
正如所解释的这里,我想指出的是,类似的症状现在由于完全不同的原因而出现,为了避免人们掉进长长的xauth
兔子洞。
任何使用 Snap 安装的东西都无法工作。因此xeyes
和xclock
可能会起作用,但新安装的 Ubuntuchromium-browser
或firefox
在 Ubuntu 上则不会。这与 SnapHOME="$SNAP_USER_DATA"
默认设置有关,这会干扰 X 期望 Xauthority 文件所在的位置。
解决方法是简单地执行以下操作:
export XAUTHORITY=$HOME/.Xauthority
在运行远程 X11 应用程序之前。
另外,如果您以非 root 用户身份连接并尝试使用su
/运行应用程序,sudo
您可能会遇到相同的错误。
原因是
二进制文件使用变量和 [users]文件
xauth
的组合$DISPLAY
/home/.Xauthority
由于此组合不再与当前用户匹配,您将看到此错误。
答案3
我在尝试安装真正想要使用 GUI 的软件时遇到了这个问题(即我无法找到一种没有 GUI 的安装方法)。我的问题是我试图运行可执行文件sudo
并sudo
进行了错误的身份验证。
提示:使用xhost
命令
该命令xhost
很有用,因为它告诉您用户是否具有 X11 连接访问权限
就我而言,我的用户可以访问:
fred@machinename $ xhost
access control disabled, clients can connect from any host
SI:localuser:fred
但使用sudo
我无权访问:
fred@machinename $ sudo xhost
X11 connection rejected because of wrong authentication.
xhost: unable to open display "localhost:10.0"
一旦我弄清楚了这一点,它就解释了为什么运行的程序sudo
会出现身份验证错误。
我的解决方案
为了解决这个问题,我执行了以下操作:
获取值$DISPLAY
fred@machinename $ echo $DISPLAY
localhost:10.0
获取与 中的数字匹配的 magic cookie 值$DISPLAY
,在我的例子中,这是 的值10
:
fred@machinename $ xauth list
machinename:4 MIT-MAGIC-COOKIE-1 e76c006944a28a5dbd3c54a0deadbeef
machinename/unix:4 MIT-MAGIC-COOKIE-1 e76c006944a28a5dbd3c54a0deadbeef
machinename/unix:10 MIT-MAGIC-COOKIE-1 cdead42e9b4c159505c0c830deadbeef
将用户更改为root:
fred@machinename $ sudo su -
将 magic cookie 值添加到 Xauthority:
root@machinename # xauth add gcashvapp511u/unix:10 MIT-MAGIC-COOKIE-1 cdead42e9b4c159505c0c830deadbeef
验证是否已正确添加:
root@machinename # cat ~/.Xauthority
machinename10MIT-MAGIC-COOKIE-1���.�L���0[���[root@machinename ~]# export DISPLAY=localhost:10.0
验证它是否正常工作:
root@machinename # xhost
access control disabled, clients can connect from any host
SI:localuser:fred
然后,我以 root 身份执行了我的程序,它终于能够运行它迫切需要的 GUI 来进行安装了。