当 ssh 保持连接时 X 转发被中断

当 ssh 保持连接时 X 转发被中断

从我的主主机[ A](带有屏幕),我ssh进入中继计算机[ B](带有-X),从那里我登录到目标计算机[ C](再次带有-X),并且 X 转发似乎在一段时间内运行良好。在 vim 中的目标机器 [ ] 上工作了一段时间后,我突然失去了使用 X 转发功能的能力,我需要从和C注销,只需再次重新启动 ssh 会话,然后就可以再次正常工作。这发生在正常的一天中,即没有主机挂起(或关闭电源)。CBX

当一切按预期工作时,C显示:

$ echo $DISPLAY
localhost:10.0

类似的应用程序xeyes会被转发并在A屏幕上呈现良好的效果。然后突然它会报告:

$ xeyes
Error: Can't open display: localhost:10.0
$ echo $DISPLAY
localhost:10.0

/var/log/syslog没有journalctl(都在C)暗示任何可疑的事情,ssh 会话再次保持活动状态并且运行良好。有人知道可能是什么问题吗?

有关主机的更多详细信息:

  • A是一个物理 manjaro 盒子(连接到 LAN)
  • B是一台物理 Ubuntu 21.04 机器(连接到 LAN)
  • C是运行 Ubuntu 18.04 的虚拟机B(通过 NAT 连接)

答案1

ForwardX11TrustedDebian 的 man for 中的条目解释了这一点ssh_config,Ubuntu 的行为与 Debian 相同,但与 Manjaro 不同:

ForwardX11Trusted

如果该选项设置为是的,(Debian 特定的默认值),远程 X11 客户端将具有对原始 X11 显示的完全访问权限。

如果该选项设置为否(上游默认值),远程 X11 客户端将被视为不可信,并防止窃取或篡改属于可信 X11 客户端的数据。此外, 用于会话的 xauth(1) 令牌将设置为在 20 分钟后过期。在此时间之后,远程客户端将被拒绝访问。

这可以解释为什么如果您主要使用基于 Debian 的系统(如 Ubuntu),您之前可能不会遇到此问题。

启用此选项的快捷方式是-Y。所以你可以简单地替换-X-Y第一个SSH命令来“修复”问题。

顺便说一句,转发两次 X11 显示并不是最好的方法,尤其是在使用 时-Y,因为如果这是一种多用户堡垒系统,则 X11 显示会在中间系统 B 中暴露给其他用户。最好只转发目标机器 C 的端口 22,并通过它来隧道其他所有内容。幸运的是,有一些专门为此而设计的选项:ProxyJump选项及其快捷方式-J。最后你可以在机器 A 上运行:

ssh -Y -J userb@computerB userc@machineC

相关内容