如何在客户端和服务器上配置 SSH 以防止Write Failed: broken pipe错误?如果您使客户端计算机休眠并稍后恢复,则通常会发生这种情况。
Ara*_*yan 329
我已经在/etc/ssh/ssh_configLinux 和 Mac 上尝试过这个:
Host *
ServerAliveInterval 120
Run Code Online (Sandbox Code Playgroud)
这是它应该向服务器发送 keepalive 消息的频率(以秒为单位)。如果这不起作用,那么训练一只猴子在你工作的时候每两分钟按一次回车键。
您既可以设置ServerAliveInterval在/etc/ssh/ssh_config客户机或ClientAliveInterval在/etc/ssh/sshd_config服务器的机器。如果您仍然收到错误,请尝试减少间隔。
可以~/.ssh/config在服务器端和客户端的文件中设置单个用户的配置。确保文件具有正确的权限chmod 644 ~/.ssh/config。
elt*_*mmo 104
SSH 会话可能会因众多且可能不可避免的原因而中断。
可用于缓解由此引起的问题的有用实用程序称为screen. Screen 是一个强大的实用程序,它允许您控制多个终端,这些终端将独立于 ssh 会话而保持活动状态。例如,如果您screen在 ssh 会话中运行,您将看到一个新终端打开,您可以使用它来运行作业。假设您的 ssh 会话在此过程中终止。运行screen -d然后screen -r将重新打开最后一个会话,您将能够从那里继续。在使用它之前,请务必阅读一些文档。
Mat*_*att 58
客户端配置
尝试创建文件:
~/.ssh/config
Run Code Online (Sandbox Code Playgroud)
添加内容:
Host *
ServerAliveInterval 30
ServerAliveCountMax 5
Run Code Online (Sandbox Code Playgroud)
现在 ssh 到您的服务器,看看您的问题是否已解决。ClientAliveInterval 选项只在配置 ssh 服务器(又名 sshd)时有用,它不会改变 ssh 客户端的任何东西,所以不要在上面的配置文件中使用它。
如果在前 30 秒内没有收到任何数据包(如上所述),这将向服务器发送一个 hello-are-you- there 信号。但是,如果连续 hello-are-you- there 信号的数量达到 ServerAliveCountMax,则 ssh 将与服务器断开连接。此值默认为 3(因此 3*30 = 90 秒没有服务器活动),如果它适合您的需要,请增加它。.ssh/config 文件有更多配置选项,您可以阅读:
有关其他选项的更多信息。您可能不希望将此应用到您连接到此示例的每个服务器。或限制它只能通过更换线路的特定服务器Host *与Host <IP>(通过IP地址更换,请参阅ssh_config中手册页)。
服务器配置
同样,您可以告诉服务器对您的客户保持温和。配置文件是/etc/ssh/sshd_config.
ClientAliveInterval 20
ClientAliveCountMax 5
Run Code Online (Sandbox Code Playgroud)
您可以通过设置或者停用ClientAliveInterval,以0或者调整ClientAliveInterval和ClientAliveCountMax设置最大SSH客户端闲置不响应探头。与 TCPKeepAlive 相比,此设置的一个优点是信号通过加密通道发送,因此不太可能被欺骗。
小智 32
我正在远程将 Ubuntu 服务器从 lucid 升级到精确,并在升级过程中丢失了 ssh 连接,并显示消息“写入失败。管道损坏”。ClientAliveInterval 和 ServerAliveInterval 什么也没做。解决方法是在客户端 ssh 中开启 TCPKeepAlive 选项:
TCPKeepAlive yes
Run Code Online (Sandbox Code Playgroud)
在
/etc/ssh/ssh_config
Run Code Online (Sandbox Code Playgroud)
希望这会有所帮助
ken*_*orb 27
对于客户端,按如下方式编辑您的~/.ssh/config(或/etc/ssh/ssh_config)文件:
Host *
TCPKeepAlive yes
ServerAliveInterval 120
Run Code Online (Sandbox Code Playgroud)
TCPKeepAlive - 指定系统是否应该向另一端发送 TCP keepalive 消息。如果它们被发送,连接的死亡或其中一台机器的崩溃将被正确地注意到。但是,这意味着如果路由暂时关闭,连接就会中断,有些人会觉得这很烦人(默认为“是”)。
ServerAliveInterval - 以秒为单位设置超时间隔,如果没有从服务器接收到数据,ssh(1) 将通过加密通道发送消息以请求服务器的响应。默认为 0,表示这些消息不会发送到服务器。
对于服务器,编辑您的/etc/ssh/sshd_config为:
ClientAliveInterval 600
ClientAliveCountMax 0
Run Code Online (Sandbox Code Playgroud)
如果您希望 ssh 客户端在 10 分钟(600 秒)后自动退出(超时)。
ClientAliveCountMax – 这表示 ssh 服务器发送的 checkalive 消息的总数,而没有得到 ssh 客户端的任何响应。默认值为 3。
ClientAliveInterval – 这表示以秒为单位的超时。在 x 秒后,ssh 服务器将向客户端发送一条消息,要求响应。默认为 0(服务器不会向客户端发送消息进行检查。)。
另请参阅:sshd_config 中的选项ServerAliveInterval和究竟是做什么的ClientAliveInterval?
小智 18
我非常喜欢莫什。我经常 ssh 进入服务器,关闭我的笔记本电脑,然后去咖啡馆,打开它并继续,就好像什么都没有改变一样。
Mosh(移动外壳)
允许漫游的远程终端应用程序,支持间歇性连接,并提供用户按键的智能本地回声和线路编辑。
Mosh 是 SSH 的替代品。它更加强大和响应迅速,尤其是通过 Wi-Fi、蜂窝和长途链接。
Mosh 是免费软件,可用于 GNU/Linux、FreeBSD、Solaris、Mac OS X 和 Android。
对我来说,Write failed: Broken pipe当我在 vim 中或在 shell 提示符下主动输入时,我得到了。我也有一段时间无法在本地浏览互联网。(我使用终端远程连接到 Ubuntu。)
我网络中的其他人从 Netflix 和其他地方流式传输大量视频。我无法证明,但我怀疑是 ISP 或路由器问题。例如,Verizon 和 Netflix 就客户的网络问题互相指责。
如果您有拨号连接,并且正在通过同步 SSH 或 telnet 连接流式传输视频或音乐,那么在某些时候您将不可避免地收到管道中断消息。升级我的 ISP 宽带套餐似乎使我的断开连接不那么频繁。
小智 6
我在这里发布了我的答案,因为它不是 Ubuntu VM。
ssh -o IPQoS=throughput user@host
Run Code Online (Sandbox Code Playgroud)