后续连接后 x11 转发失败

后续连接后 x11 转发失败

主机:Fedora 36,6.0.18-200.fc36.x86_64,OpenSSH_8.8p1,X11Forwarding yes

客户端:Windows 10,MobaXterm 22.1

我打开与主机的第一个连接,x11-forwarding 起作用了。

host01/unix:22  MIT-MAGIC-COOKIE-1  5910df423cb206bccd40df7d23132345
host01/unix:21  MIT-MAGIC-COOKIE-1  d53c12b33486aa9174722df08219523c
host01/unix:20  MIT-MAGIC-COOKIE-1  a5ae8cc54800be76bf34eb0efcfef010
host01/unix:19  MIT-MAGIC-COOKIE-1  1ec5c2cc744b058e8a71dda241800271
host01/unix:11  MIT-MAGIC-COOKIE-1  5cefae987f7cb71b941107b99b15c630
host01/unix:12  MIT-MAGIC-COOKIE-1  bf78e1d7b33c7410cb266c548b9732a8
host01/unix:13  MIT-MAGIC-COOKIE-1  048d7933f3212d654fbc84e7f20579c2
host01/unix:14  MIT-MAGIC-COOKIE-1  d358f594c3e342e9bafa53bf2419751c
host01/unix:15  MIT-MAGIC-COOKIE-1  cdf77dfabbad8be764a5bba194525ffd
host01/unix:16  MIT-MAGIC-COOKIE-1  c610a4ed220523956fcedb4f6058c06e
host01/unix:17  MIT-MAGIC-COOKIE-1  10070d43b0a838bcb8605fe41cb75e49
host01/unix:18  MIT-MAGIC-COOKIE-1  18b41e95ffa21a4e2e9c11da03beea07
host01/unix:0  MIT-MAGIC-COOKIE-1  53d8bf1e11674497b602e4c39e0ed928
host01/unix:10  MIT-MAGIC-COOKIE-1  efa99cc0e407d8b23a479b9c7d502d94

现在,如果我在客户端上打开到主机的另一个连接,x11-forwarding 在第二个连接上不再起作用,但在第一个连接上也不起作用,cookie 会发生变化:

host01/unix:10  MIT-MAGIC-COOKIE-1  4b50ceb92269a17825ecd011208dbe81

其它饼干保持不变。

user@host01 ~ $ xterm
MoTTY X11 proxy: Authorisation not recognised

In case you are trying to start a graphical application with "sudo", read this article in order to avoid this issue:
https://blog.mobatek.net/post/how-to-keep-X11-display-after-su-or-sudo/

xterm: Xt error: Can't open display: localhost:10.0

这能修复吗?以前也出现过这种情况,但我不确定发生了什么变化,主机已启用自动更新(还不是 Fedora 37)。

如果我在文件上使用 chattr +i,则会打印以下内容:

/usr/bin/xauth:  /home/user/.Xauthority not writable, changes will be ignored
/usr/bin/xauth:  /home/user/.Xauthority not writable, changes ignored

答案1

嗨,我有一个非常相似的选项,并且已经将范围缩小了一点。系统已完全更新为最新版本或我使用的所有内容。内核 vmlinuz-6.0.18-200.fc36.x86_64 失败内核 vmlinuz-6.0.9-200.fc36.x86_64 运行正常。抱歉,我没有介于两者之间的任何内核。因此,完全相同的软件和配置适用于旧内核,但适用于新内核。

这一切都发生在我的本地网络上。我实际的问题是用户二连接到我的服务器并尝试远程显示。一切都很好。第二个用户(以及之后的所有用户)连接,当他们尝试显示时,根据程序的不同,会出现各种错误,但有一个屏幕由于身份验证错误,导致 X11 连接被拒绝。(如果是同一个用户,则用户二的输出会出现在用户一屏幕上。)显然,它试图写入错误的屏幕并失败了。由于错误在内核中,而不是在任何系统程序/文件中,我猜只有修复该代码才能使其再次正常工作。

目前我唯一的解决方案是在旧内核上启动。也许这对你也有效,至少你现在可以继续下去。

答案2

我已经自己“修复”了它,但这只是一种解决方法:

附加到您的.bashrc

if [[ -n $SSH_CONNECTION ]] ; then
        xset -q > /dev/null 2>&1
        ret=$?
        if [[ $ret -eq 0 ]]; then
                sudo /usr/bin/chattr +i /home/user/.Xauthority
        fi
fi

这会使文件处于写保护状态。后续 SSH 连接将能够使用 x11 转发。但是,如果您关闭 ssh 客户端,这将不再起作用。因此:

systemd-timer 每分钟:

#!/bin/bash

conns=$(last -a | grep -i still |grep pts)
ret=$?

if [[ $ret -eq 1 ]]; then
        echo "no ssh login found"
        /usr/bin/chattr -i /home/user/.Xauthority
fi

这将每分钟运行一次,如果没有 ssh 用户登录,则会删除写保护。

相关内容