通过 SSH 转发的 X11 显示从 Linux 到 Mac 一段时间后丢失

通过 SSH 转发的 X11 显示从 Linux 到 Mac 一段时间后丢失

当我从 Mac (10.7.2) 登录到 Linux (Ubuntu 8.04) 时,ssh 转发我的 X11 连接时出现了一个新问题,让我很烦恼。我使用 ssh -X 登录到远程计算机并从该 shell 启动基于 X11 的应用程序没有任何问题。

最近开始发生的事情是,一段时间后(大约几个小时),从同一 shell 对 X11 应用程序的其他调用无法启动,因为转发的显示被阻止了(我猜)。例如,当尝试启动 xterm 时,我收到有关 DISPLAY 设置错误的常见消息,例如:

xterm Xt 错误:无法打开显示:localhost:10.0

但是我登录时启动的 X11 应用程序仍然运行良好,使用完全相同的显示(localhost:10.0),只是它启动得更早。

我在 sshd_config 中打开了详细日志记录,并在 /var/log/auth.log 文件中看到了以下信息,这是对失败的 xterm 启动尝试的响应:

sshd[22104]: 通道 8: 打开失败: 管理禁止: 打开失败

如果我再次通过 ssh -X 连接到服务器,启动一个新 shell 并分配一个新的显示(localhost:11.0),则会重复相同的过程:只要我保持它们打开(几天),早期启动的 X11 应用程序就可以正常运行,但几个小时后,我无法从该 shell 启动任何新的应用程序。

详细信息:OpenSSH sshd 服务器在 Ubuntu 8.04 上运行,显示转发到运行 Lion (10.7.2) 的 Mac,使用默认的 Apple X 服务器。系统通过以太网 LAN 连接,它们之间有一个交换机。两台机器都没有运行防火墙。直到最近(几天前),这个设置运行得很好,所以我很困惑下一步该去哪里找。我绝不是 X11 或 SSH 专家,但有丰富的 UNIX/Linux 经验。客户端或服务器配置没有明显的变化,尽管我尝试更改一些选项来尝试调试它,比如将 sshd_config 的 TCPKeepAlive 设置为 no,并设置“host +localhost”(你可以看出我一直在谷歌搜索)。

当从 Linux 11.10 笔记本电脑通过相同的网络和交换机登录到相同的远程主机时,不会发生此问题 - 几个小时后可以从相同的 ssh 登录 shell 成功调用 xterm,而从 Mac 进行的相同实验失败(今天早上进行了测试以确保无误),所以它似乎是 Mac 特有的问题。

在远程计算机(sshd 服务器)上设置“LogLevel DEBUG3”,并且我没有对客户端连接进行任何更改的情况下,/var/log/auth.log 显示连接状态报告在一夜之间发生了一个细微变化,这是来自 Linux 计算机(我认为)的一个成功的 ssh 会话使用的端口号,下面的连接#7:

sshd[20173]: debug3: 通道 7: 状态: 以下连接已打开:\r\n #0 服务器会话 (t4 r0 i0/0 o0/0 fd 14/13 cfd -1)\r\n #3 来自 127.0.0.1 端口 57564 的 X11 连接 (t4 r1 i0/0 o0/0 fd 16/16 cfd -1)\r\n #4 来自 127.0.0.1 端口 57565 的 X11 连接 (t4 r2 i0/0 o0/0 fd 17/17 cfd -1)\r\n #5 来自 127.0.0.1 端口 57566 的 X11 连接 (t4 r3 i0/0 o0/0 fd 18/18 cfd -1)\r\n #6 来自127.0.0.1 端口 57567 (t4 r4 i0/0 o0/0 fd 19/19 cfd -1)\r\n #7 来自 127.0.0.1 端口 59007 的 X11 连接

在此报告中,除了连接 #7 使用的端口号外,其他所有信息与状态报告相同。我认为 #7 是 Linux 客户端,是唯一一个仍保持显示连接的客户端。根据这些报告在夜间的顺序判断,端口号会随着时间的推移不断增加。

谢谢你的帮助,

-麦克风

答案1

在我将 Mac 客户端的 /etc/ssh_config 更改为包含以下行后,ssh 会话启动:

ForwardX11超时 596h

都运行良好,而且一整天都运行良好。到现在为止,它们都拒绝启动新的 xterms。所以我相信这就是答案,幸运的是,这是一个简单的解决方案,但从现在起 3 个半星期后,超时仍会发生。

答案2

man ssh_config

ForwardX11可信

如果将此选项设置为“是”,则远程 X11 客户端将具有对原始 X11 显示的完全访问权限。如果将此选项设置为“否”,则远程 X11 客户端将被视为不受信任,并被阻止窃取或篡改属于受信任 X11 客户端的数据。此外,用于会话的 xauth(1) 令牌将设置为 20 分钟后过期。在此时间之后,将拒绝远程客户端访问。默认值为“否”。有关对不受信任的客户端施加的限制的完整详细信息,请参阅 X11 SECURITY 扩展规范。

答案3

添加到“2012 年 1 月 7 日 0:11 mklein9 28129 回答” “在我更改 Mac 客户端的 /etc/ssh_config 以包含以下行后,ssh 会话启动:

ForwardX11Timeout 596h

......但从现在起三周半之后仍将暂停。”

显然,您可以使用 0,这会将超时设置为无穷大(只要连接处于打开状态)。

ForwardX11Timeout 0

...

相关内容