当我在 SSH 会话中使用 tmux 时,是什么导致了著名的“管道断裂”?

当我在 SSH 会话中使用 tmux 时,是什么导致了著名的“管道断裂”?

场景 1:我从我的雇主(OSX Yosemite SSH 客户端)通过 SSH 连接到我的家庭服务器(Debian 稳定版)并(重新)连接到 tmux 会话。如果我让终端处于非活动状态一段时间(约 20 分钟),网络连接似乎中断了太长时间,并出现著名的 SSH 错误:“管道损坏”。如果我重新登录,tmux 的行为将与预期一致:会话仍然有效。

场景 2:我从雇主那里通过 SSH 连接到我的家用电脑。现在我做我通常做的事情,但这次不是在 tmux 会话中。现在我可以让终端不活动几个小时,它不会死机。

场景 3:我从自己的家庭网段通过 SSH 连接到同一台服务器并连接到 tmux 会话。现在我得到了预期的行为。无论是否使用 tmux,终端在一段时间不活动后都不会丢失连接。

我尝试用 Google 搜索我的问题,但问题是我得到的答案是错误的:问:我使用 SSH 执行长时间运行的命令,如果管道断了,我该如何重新连接?答:你听说过 tmux 吗?是的,我听说过……但我没有听说过 tmux 会导致管道断裂。

我也在 irc 上问了这个问题,但没有得到答复。

答案1

在 /etc/ssh_config 或主目录 ~/.ssh/config 中全局启用 SSH keepalive

KeepAlive yes
ServerAliveInterval 60

在我找到这个 openssh 选项之前,我会运行“top -d 60”来保持连接。

答案2

我猜这与“保持会话活动”有关,又称“ping”。有针对此类事情的配置选项。Tmux 不介意断开连接,而且理想情况下,您不应该让未使用的连接保持打开状态;这是不好的网络礼仪 ;-)

相关内容