有时我的 SSH 会话会断开并显示一条Write failed: Broken pipe
消息。这是什么意思?我怎样才能让我的会话保持开放状态?
我知道screen
,但这不是我正在寻找的答案。我认为这是一个sshd
配置选项。
答案1
您的服务器可能会关闭闲置时间过长的连接。您可以更新客户端 ( ServerAliveInterval
) 或服务器 ( ClientAliveInterval
)
ServerAliveInterval
Sets a timeout interval in seconds after which if no data has
been received from the server, ssh(1) will send a message through
the encrypted channel to request a response from the server. The
default is 0, indicating that these messages will not be sent to
the server. This option applies to protocol version 2 only.
ClientAliveInterval
Sets a timeout interval in seconds after which if no data has
been received from the client, sshd(8) will send a message
through the encrypted channel to request a response from the
client. The default is 0, indicating that these messages will
not be sent to the client. This option applies to protocol
version 2 only.
更新您的服务器(并重新启动您的sshd
)
echo "ClientAliveInterval 60" | sudo tee -a /etc/ssh/sshd_config
或者客户端:
echo "ServerAliveInterval 60" >> ~/.ssh/config
答案2
如果想要更长的连接时间,在客户端添加:
echo 'ServerAliveInterval 30' | tee -a ~/.ssh/config
echo 'ServerAliveCountMax 1200' | tee -a ~/.ssh/config
ServerAliveCountMax
默认情况下,该值设置为 3。因此,一旦ServerAliveInterval
向您的服务器发送了 3 小包信息,它将自动注销。将其设置为 1200 意味着此过程必须至少发生 1200 次。简而言之,您应该至少连接 30*1200 秒(10 小时)。
答案3
另一种解决方案是使用mosh
- 手机外壳。与 ssh 相比,它通过 UDP 连接并支持漫游。您可以在家中开始会话,暂停您的笔记本电脑,将其带到工作/朋友/任何有互联网的地方,取消暂停您的笔记本电脑并继续工作,就像什么也没发生一样。如果您的互联网连接很差,它尤其有用:如果您的击键未到达服务器,它会显示即时反馈,并不断尝试重新建立连接。
安装和设置很简单:它现在包含在所有当前的 Linux(加上一些非 Linux)发行版中,并且它通过先前的 ssh 连接协调会话初始化和身份验证。因此,如果您能够通过 via 连接,并且两端都安装了 mosh 软件包,那么ssh user@server
您很可能只需调用 即可与 mosh 连接。mosh user@server
连接失败的主要原因是您必须通过 UDP 端口(默认范围:60000-61000)访问服务器才能使 mosh 正常工作。因此,如果服务器位于防火墙后面,如果您自己无法在其中打孔,那么您就很不幸(安全影响)。
答案4
这通常意味着您的网络 (TCP) 连接已重置。例如,您的互联网提供商重新连接了您或类似的事情。