美文网首页Server服务器
三种办法彻底解决SSH的 Write failed: Broke

三种办法彻底解决SSH的 Write failed: Broke

作者: Jeff_9021 | 来源:发表于2019-12-15 17:08 被阅读0次

    问题描述

    在使用SSH连接远程服务器的时候,如果长时间不操作,再次进入 Terminal 时就会有卡死一段时间没有响应。等待一段时间以后,会发现以下错误提示:

    Write failed: Broken pipe

    这表示连接管道已经断开,所以只能重进行连接。

    解决方法有三:

    方法一:客户端配置

    在客户端的 ~/.ssh/ config文件(如不存在请自行创建)中添加下面内容:

    ServerAliveInterval 60

    方法二:服务器端配置

    在服务器的 /etc/ssh/sshd_config 中添加如下的配置:

    ClientAliveInterval 60

    方法三:临时SSH命令配置

    如果只是临时性的连接(即只作用于当前SSH),可以直接使用 ssh 命令参数进行配置。

    $ ssh -o ServerAliveInterval=60 user@sshserver

    原理

    为了保证服务器的资源不被浪费,系统会对SSH的连接进行自动回收管理。回收的原则就是如果一个连接在规定的限制时间内没有数据传输就认定为超时,然后就会主动断开连接。基于这个原则,如果想要保持连接,只需要在超时前发送一个空数据包即可。方法一和方法三是客户端主动发消息,而方法二是服务器端主动发消息。这两方法各有利弊,简单说一下区别。

    客户端在线状态相对自由,可以随时上线和下线。这样的话,如果下线了,那么就无法继续发送消息,这样即使设置了ServerAliveInterval=60,消息因掉线而无法发出。所以超时后,仍然会掉线。而服务器端如果设置了以后,如果客户端掉线了,会根据 ClientAliveCountMax 进行反复测试,如果超过次数,仍然也会掉线。但是相对于客户端,连接的稳定性更加可靠。不过需要注意的事,在客户端数量较少的情况下使用服务器端维持比较合适,否则当客户端数量巨大时,对服务器的资源比较浪费。

    资料:

    https://blog.csdn.net/weixin_43145361/article/details/85259854

    相关文章

      网友评论

        本文标题:三种办法彻底解决SSH的 Write failed: Broke

        本文链接:https://www.haomeiwen.com/subject/szflnctx.html