Ste*_*n M 62 bash gnu-screen su xauth
作为 root,我连接到远程主机以执行命令。只有“standarduser”具有适当的 id 文件和正确的 .ssh/config,所以我首先切换用户:
su standarduser -c 'ssh -x remotehost ./remotecommand'
Run Code Online (Sandbox Code Playgroud)
该命令工作正常,但尽管我使用了“-x”(禁用 X11-Forwarding)并在 中禁用了 X11Forwards /etc/ssh/ssh_config,但我仍然收到错误消息:
X11 connection rejected because of wrong authentication.
Run Code Online (Sandbox Code Playgroud)
当我以“standarduser”身份登录时,我没有收到错误消息。
这很烦人,因为我想将该命令集成到 cron 作业文件中。我知道错误消息指的是 root 的 .XAuth 文件的错误身份验证,但我什至没有尝试通过 X11 进行连接。
为什么“ssh -x”没有禁用 X11 连接并抛出错误消息?
更新:该消息仅在我在屏幕内登录时显示,当在本地机器本身(无屏幕)上使用上述命令时,我没有收到错误消息,所以这对 cron 也应该没问题.
我也启动了相同的命令,-v并且意外地得到了错误消息 FIRST,甚至在来自 SSH 的状态信息之前:
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
Run Code Online (Sandbox Code Playgroud)
这让我想到了问题本身,不是ssh抛出错误消息的原因,而是su:
root@localhost:~# su standarduser -c 'echo Hi'
X11 connection rejected because of wrong authentication.
Hi
Run Code Online (Sandbox Code Playgroud)
为什么我只在 内收到此错误screen?如何禁用此错误消息?
Neu*_*ter 93
好像你根本缺乏一些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`
Run Code Online (Sandbox Code Playgroud)
注意:检查反引号!它们不能用引号代替!您需要sudo安装才能进一步执行第二个命令!
原版长版
要解决问题,首先要检测standarduser使用哪个显示编号:
standarduser@localhost:~$ echo $DISPLAY
localhost:21.0
Run Code Online (Sandbox Code Playgroud)
在这种情况下是21.0。其次,显示standarduser的cookies列表:
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
Run Code Online (Sandbox Code Playgroud)
用于21.0显示的 cookie是列表中的第二个并以104f.
最后要做的是将此特定 cookie 添加到根目录的.Xauthority. 以 root 身份登录并执行以下操作:
root@localhost:~$ xauth add localhost/unix:21 MIT-MAGIC-COOKIE-1 0ba2913f8d9df0ee9eda295cad7b104f
Run Code Online (Sandbox Code Playgroud)
这是你如何减轻了X11 connection rejected because of wrong authentication当您运行错误su,如bash脚本或不同的用户screen。
感谢这位大佬的启发。
小智 50
一个更简单的解决方案:
1.- ssh user@host
2.- $ sudo --preserve-env=DISPLAY -s
3.- # xauth merge /home/user/.Xauthority
就这样
小智 8
我的需求略有不同,所以我想出了一个略有不同的解决方案。我需要能够以另一个用户(非 root 用户)身份运行 X11 应用程序。运行 CentOS,所以我没有像 ubuntu 幸运的狗那样使用 Xauth 魔法的可爱的 gksudo 工具。
我真的不想为了登录、切换用户和运行应用程序而编写一些自定义脚本;这对我来说似乎有点多余。
步骤1:
允许在 sudo 会话中携带 $XAUTHORITY。
在 /etc/sudoers 中其余 env_keep 语句下添加此行:
Defaults env_keep += "DISPLAY XAUTHORIZATION XAUTHORITY"
Run Code Online (Sandbox Code Playgroud)
第二步:
让您的目标用户能够读取您的 .Xauthority(是的,我知道,尖叫安全!随心所欲)。对于那些只想以 root 身份运行命令的人,可以跳过这一步。
目标用户与我共享同一个组,所以我只需打开组读取权限:
$ chmod g+r user ~/.Xauthority
Run Code Online (Sandbox Code Playgroud)
第三步:
默认情况下,CentOS 不会填充 $XAUTHORITY 的值。在您的个人资料中添加一行(我的是 ~/.bash_profile):
export XAUTHORITY=$HOME/.Xauthority
Run Code Online (Sandbox Code Playgroud)
就是这样。没有更多的调整。无需编写 .XML 即可使 PolicyKit 工作。每次登录都没有运行脚本。无需两次 sudo 即可复制 xauth。从现在开始,您可以简单地:
$ sudo -u user xcalc
Run Code Online (Sandbox Code Playgroud)
适用于 MobaXTerm。
| 归档时间: |
|
| 查看次数: |
123237 次 |
| 最近记录: |