我该如何配置客户端和服务器上的 SSH 以防止出现Write Failed: broken pipe
错误?如果您让客户端计算机休眠并稍后恢复,通常会发生这种情况。
答案1
我已经在/etc/ssh/ssh_config
Linux 和 Mac 上尝试过这个:
Host *
ServerAliveInterval 120
这是它应该以秒为单位向服务器发送保持活动消息的频率。如果这不起作用,那么训练一只猴子在你工作时每两分钟按一次回车键。
ServerAliveInterval
您可以在/etc/ssh/ssh_config
客户端计算机或服务器计算机ClientAliveInterval
中设置/etc/ssh/sshd_config
。如果仍然出现错误,请尝试减少间隔。
可以在服务器和客户端的文件中设置单个用户的配置~/.ssh/config
。确保文件具有正确的权限chmod 644 ~/.ssh/config
。
答案2
SSH 会话可能会由于多种且不可避免的原因而中断。
一个有用的实用程序可用于缓解由此引起的问题,它称为screen
Screen。Screen 是一个功能强大的实用程序,它允许您控制多个终端,这些终端将独立于 ssh 会话保持活动状态。例如,如果您screen
在 ssh 会话中运行,您将看到一个新终端打开,您可以使用它来运行作业。假设您的 ssh 会话在此过程中终止。screen -d
然后运行screen -r
将重新打开最后一个会话,您将能够从那里继续。请务必阅读一些文件在使用前。
答案3
客户端配置
尝试创建文件:
~/.ssh/config
添加内容:
Host *
ServerAliveInterval 30
ServerAliveCountMax 5
现在 ssh 到你的服务器,看看你的问题是否已经解决。ClientAliveInterval 选项仅在配置 ssh 服务器(又名 sshd)时有用,它不会改变 ssh 客户端的任何内容,因此不要在上面的配置文件中使用它。
如果在前 30 秒内没有收到任何数据包(如上所述),这将向服务器发送“你好吗”信号。但是,如果连续的“你好吗”信号数量达到 ServerAliveCountMax,则 ssh 将断开与服务器的连接。此值默认为 3(因此 3*30 = 90 秒无服务器活动),如果适合您的需求,请增加此值。.ssh/config 文件中还有更多配置选项,您可以阅读:
有关其他选项的更多信息。您可能不想将此应用于此示例将要连接到的每台服务器。或者,通过Host *
用Host <IP>
(替换为 IP 地址,请参阅 ssh_config 手册页)替换行,将其限制为仅特定服务器。
服务器配置
同样,您可以告诉服务器要温柔地对待您的客户端。配置文件是/etc/ssh/sshd_config
。
ClientAliveInterval 20
ClientAliveCountMax 5
您可以通过设置ClientAliveInterval
为0
或调整来停用它ClientAliveInterval
,ClientAliveCountMax
以设置不响应探测的最大 ssh 客户端不活动时间。此设置相对于 TCPKeepAlive 的一个优点是信号是通过加密通道发送的,因此不太可能被欺骗。
答案4
对于客户端,按如下方式编辑您的~/.ssh/config
(或/etc/ssh/ssh_config
)文件:
Host *
TCPKeepAlive yes
ServerAliveInterval 120
TCP保持连接- 指定系统是否应向另一端发送 TCP 保持活动消息。如果发送了这些消息,则连接中断或其中一台机器崩溃将会被正确注意到。但是,这意味着如果路由暂时中断,连接将会中断,有些人会觉得这很烦人(默认为“是”)。
服务器存活间隔- 设置超时间隔(以秒为单位),如果在此间隔内未从服务器收到任何数据,ssh(1) 将通过加密通道发送一条消息,以请求服务器做出响应。默认值为 0,表示这些消息不会发送到服务器。
对于服务器,编辑如下/etc/ssh/sshd_config
:
ClientAliveInterval 600
ClientAliveCountMax 0
如果希望ssh客户端在10分钟(600秒)后自动退出(超时)。
客户端存活数最大值– 这表示 ssh 服务器在未收到 ssh 客户端任何响应的情况下发送的 checkalive 消息总数。默认值为 3。
客户端存活间隔– 表示超时时间(以秒为单位)。经过 x 秒后,ssh 服务器将向客户端发送一条消息,要求其响应。默认值为 0(服务器不会向客户端发送消息进行检查)。
也可以看看:sshd_config 中的选项ServerAliveInterval
和具体起什么作用?ClientAliveInterval