目录

原理

方法1:通过客户端配置

方法2:服务器端配置

方法3:临时SSH命令配置

总结


在使用SSH连接远程服务器的时候,如果长时间不操作,再次进入 Terminal 时就会有卡死一段时间没有响应。等待一段时间以后,会发现以下错误提示:
Write failed: Broken pipe
同时SSH连接已经断开。有时候还会出现界面卡死没有响应的情况。最终只能重新打开终端进行连接。

原理

为了保证服务器的资源不被浪费,系统会对SSH的连接定期进行自动回收(即自动断开),其回收原则为:一个连接在规定的限制时间内没有数据传输就认定为超时,然后就会主动断开连接。 基于这个原则,如果想要保持连接,只需要在超时前发送一个空数据包即可。

解决方法

从安全和资源利用的角度考虑,长时间的连接都是不合适的,尤其是一些长期连接还没有操作的。所以为了解决这个问题,服务器在指定时间会进行判断连接状态,然后判断是否判断连接。了解了这个原理,我们可以以下三个方案来解决问题。

方法1:通过客户端配置

在客户端的 ~/.ssh/ config 文件(如不存在请自行创建)中添加下面内容:
ServerAliveInterval 60
参数 ServerAliveInterval 是让客户端上以60秒的时间间隔,向目标服务器发送空消息以保持连接。这个参数一般和 ServerAliveCountMax 一起使用,ServerAliveCountMax 用于指定在服务器没有响应时,继续尝试发消息的次数(默认值:3)。

请看以下的示例,我们为某服务器指定了相应的参数写到 ~/.ssh/config 配置文件中:

Host serv01HostName xxx.xxx.xxx.xxxUser rootServerAliveInterval 60    # 每60秒发送一个空包以保持连接ServerAliveCountMax 10    # 如果发送不成功,最多尝试10次Host serv02HostName xxx.xxx.xxx.xxxUser root

在这个示例中,我们配置了两台服务器 serv0 和 serv02。保持连接的配置是为 serv01设置的,因此只有 serv01 有效,而对 sev02 无效。

方法2:服务器端配置

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

ClientAliveInterval 60
ClientAliveCountMax 10

ClientAliveInterval: 服务器上设置的发送空消息至服务器的秒数以保持连接。上边的配置里我还开启了 ClientAliveCountMax 10,它的作用是60秒钟发送一次心跳,如果连续10次都没有响应,服务器端就断开连接。

方法3:临时SSH命令配置

如果只是临时性的连接(即只作用于当前SSH),可以直接使用 ssh 命令参数进行配置。
$ ssh -o ServerAliveInterval=60 user@sshserver

总结

方法一和方法三是客户端主动发消息,而方法二是服务器端主动发消息。这两方法各有利弊,简单说一下区别。

对于客户端在线状态相对自由,可以随时上线和下线。这样的话,如果下线了,那么就无法继续发送消息,这样即使设置了 ServerAliveInterval=60,消息因掉线而无法发出。所以超时后,仍然会掉线。

对于服务器端,在设置了防掉线后,如果客户端掉线了,会根据 ClientAliveCountMax 进行反复测试,如果超过测试次数,仍然也会掉线。所以总体上可靠性比客户端的方式更好。不过需要注意的事,当服务器的连接数量较多时会产生一定的资源浪费。

linux ssh 报错 Write failed: Broken pipe 解决方法相关推荐

  1. linux c 报错 multiple definition of ‘xxx’ 解决方法

    错误: 方法一 在test.c中定义 //test.c ......struct pdesc const cameractrl_params[] = { {PT_STRI_, 0, 1, OFFSET ...

  2. linux ssh 报错failed - POSSIBLE BREAK-IN ATTEMPT

    linux ssh 报错failed - POSSIBLE BREAK-IN ATTEMPT 问题故障: 今天在新租的虚拟机上,发现ssh登陆机器的时候报错,如下: [root@pictures_ne ...

  3. 转)VCSA 6.5重启无法访问,报错“503 Service Unavailable”的解决方法

    转)VCSA 6.5重启无法访问,报错"503 Service Unavailable"的解决方法 1. 问题 重启vcenter,登陆vsphere client,提示 &quo ...

  4. python https请求报错:SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 解决方法

    python爬虫,使用requests库发送https请求报错:SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 解决方法: imp ...

  5. 断开的管道 java.io.IOException: Broken pipe 解决方法

    断开的管道 java.io.IOException: Broken pipe 解决方法 一.Broken pipe产生原因分析 1.当访问某个服务突然服务器挂了,就会产生Broken pipe; 2. ...

  6. vs2010一运行就报错deven.exe assert failure 解决方法,卸载系统中.netFramework最新版本的(简体中文)...

    vs2010一运行就报错deven.exe assert failure 解决方法,卸载系统中.netFramework最新版本的(简体中文) 转载于:https://www.cnblogs.com/ ...

  7. 微信二次分享签名错误php,微信二次分享报错invalid signature问题及解决方法

    基于微信公众号开发的h5页面(使用jssdk接口),由用户A分享给用户B,用户B再次分享这个页面时,不能成功分享.问题出在用户B收到的分享链接与用户A打开的链接不同 A用户的链接为 B用户收到的连接 ...

  8. 程序执行报错Missing Connection or ConnectionString 解决方法

    程序执行报错Missing Connection or ConnectionString 解决方法 参考文章: (1)程序执行报错Missing Connection or ConnectionStr ...

  9. dedecms后台报错“Undefined variable cfg_domain_cookie”的解决方法

    dedecms后台报错"Undefined variable cfg_domain_cookie"的解决方法 打开调试模式 Notice: Undefined variable: ...

最新文章

  1. 985博士《深度学习》手推公式笔记开源PDF下载!
  2. 固态器件理论(11)超导设备
  3. python基础语法-对文件的操作
  4. python代替javascript_Pyjamas - 用python代替javascript编写基于浏览器的应用
  5. JDBC 8.0 和 JDBC 5.0 区别
  6. 主题模型TopicModel:LDA中的数学模型
  7. curlopt_ssl_verifypeer后https还是验证不过_为什么 HTTPS 需要 7 次握手和 9 倍时延
  8. 用tomcat6修改java内存_Tomcat 服务器内存修改
  9. PHP处理多表查询时的SQL语句拆分与重新组装
  10. 【安全】Web渗透测试(全流程)
  11. 用srvany.exe将程序安装为windows服务的步骤链接
  12. 思岚A1激光雷达的测试(windows)
  13. 知识图谱学习(一) py2neo
  14. 038 Divisible Subsequences
  15. 计算机听课与评课活动记录表,听课 评课记录表参考
  16. 现代电子计算机本质工作原理,现代电子计算机的本质工作原理是()。
  17. Android自定义导览地图组件(一)
  18. 建筑工地通道管理系统(有效防止考勤作弊)
  19. [ 工具 ] ___ VT : VMware Tools
  20. POJO和JavaBean的区别

热门文章

  1. 较深度地递归转义过滤
  2. 一个关于解决序列化问题的编程技巧
  3. Tungsten Fabric SDN — Service Chain — 高级特性
  4. 5G NGC — PCF 策略控制功能
  5. DPDK — 数据平台优化技术
  6. 全能终端神器——MobaXterm
  7. 第五个页面:更多电影页面
  8. 201671010128 2017-09-17《Java程序设计》之步步深入面向对象
  9. 微软提供支持Windows 10预览版和EdgeHTML 14的预配置虚拟主机
  10. 西部开源学习笔记BOOK2-《unit 4》