起因

在使用SecureCRT通过telnet或SSH访问linux时,总是出现过段时间操作就会断开连接提示重连的问题。起初以为是网络不稳定造成的,但我测试发现在服务器端一直可以ping通客户端IP,同样客户端也可以ping通服务器,所以网络应该是没问题的(linux装在虚拟机下,网络模式设置为桥接,路由器也没问题)。
试用了最新的64位SecureCRT(本机WIN7 64位,开始用的是32位SecureCRT),putty客户端仍然存在这个问题,所以软件不兼容的问题也排除了。

最后通过各种摸索,终于知道了问题的主要原因,因为连接是可以的,只是会超时断开,根据网络结构来看,问题就可能出现在一下这几个部分

  1. 服务器存在防火墙,会关闭超时空闲连接,或设置了关闭超时空闲连接。
  2. 客服端和服务器之间存在路由器,路由器也可能带有防火墙,会关闭超时空闲连接。
  3. 客服端存在防火墙,会关闭超时空闲连接。

解决思路

知道问题,我们就有解决方法了:

既然问题都是会断开超时的空闲连接,那么我们就可以让客户端与服务器之间的连接“不空闲”,

  可以从服务器方面入手:

  这里需要服务器权限去修改/etc/ssh/sshd_config配置文件 ClientAliveInterval 300(默认为0,这里如果选项前面有“#”,表示被注释掉需要打开,同时TCPKeepAlive 也需要设置为yes)这个参数300的是意思是每5分钟,服务器向客户端发一个消息,用于保持连接,当然数值要比你的三个防火墙超时时间的最小值小,否则还没等发送空闲包,连接就被断开了。
修改后使用service sshd reload 命令执行生效,这个修改适用于所有终端连接,但不支持telnet方式连接,SSH方式可以保持连接。

  也可以从客户端入手:

  如果没有服务器权限则可以使用改变客户端的方式来让让客户端与服务器之间的连接“不空闲”,思想是一样的即让客户端每隔多长时间向服务器发一个消息,用于保持连接,上面提到的两个客户端secureCRT和putty都可以设置,这里的时间也是需要比你的三个防火墙超时时间的最小值小。
secureCRT在选项 终端 反空闲 中设置每隔多少秒发送一个字符串,或者是NO-OP协议包。
putty:putty -> Connection -> Seconds between keepalives ( 0 to turn off ), 默认为0, 改为300。

除了去适用防火墙,当然也可以通过改变防火墙来解决问题

  直接禁用防火墙可以实现,但整个网络的安全性就成问题了,去配置三个防火墙的规则也是让人比较吐血的事,这里就不赘述了,有耐心的朋友可以自己试试。

总结

  最后还是比较推荐使用客户端去发送消息包,操作简单,不会修改服务器文件,仅对自己有效,网络安全也能保证,并且增加的消息包也不会造成什么网络负担。
以上网上的资料加个人的理解,在这里给大家分享下,如有表述不正确的地方希望指出,共同学习共同进步嘛,by kylin9578(成都51testing第17期学员)

引用自 http://bbs.51testing.com/thread-987133-1-1.html

客户端连接linux经常间隔性断开链接【转】的更多相关文章

  1. 客户端连接linux经常间隔性断开链接

    起因 在使用SecureCRT通过telnet或SSH访问linux时,总是出现过段时间操作就会断开连接提示重连的问题.起初以为是网络不稳定造成的,但我测试发现在服务器端一直可以ping通客户端IP, ...

  2. windows系统如何通过Xshell 客户端连接 linux系统(主要介绍ubuntu系统)

    一. 1.查看ubuntu系统的ip地址:ifconfig 在window系统运行窗口下:ping ubuntu系统的IP地址:例如:ping 192.168.163.129 出现下述命令就是ping ...

  3. Windows的VNC客户端连接Linux无法复制粘贴

    问题描述 在Windows里使用VNC客户端远程桌面连接Linux,Linux里的文字信息复制之后无法粘贴到Windows中 解决办法 在Linux中执行命令 vncconfig -nowin& ...

  4. 使用Windows客户端连接Linux系统中的MySQL时产生的错误已经解决

    .personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...

  5. 如何通过SecureCRT作为客户端连接Linux服务器

    主机cmd ping虚拟机失败 打开计算机-管理-服务,找到所有以VMare开头的服务,右键点击启动即可,此时主机即可ping通虚拟机 可ping通之后,在主机cmd窗口输入 ssh root@192 ...

  6. PL/SQL客户端连接虚拟机(linux)下的oracle服务器配置

    虚拟机上linux装了oracle数据库服务器,想通过windowspl/sql客户端连接到服务器上,虚拟机的网络连接方式我设置为host-only.     去oracle官方网站下载instant ...

  7. 使用redis客户端连接windows和linux下的redis并解决无法连接redis的问题

    搭建环境:linux是centos7.4(请注意centos7以下版本的防火墙跟centos7以上的不同,使用redis客户端连接redis时会有区别,建议使用centos7以上版本) 一.下载red ...

  8. 使用 WebSocket 客户端连接 MQTT 服务器

    简介 近年来随着 Web 前端的快速发展,浏览器新特性层出不穷,越来越多的应用可以在浏览器端或通过浏览器渲染引擎实现,Web 应用的即时通信方式 WebSocket 得到了广泛的应用. WebSock ...

  9. MongoDB的基本操作:服务端启动,客户端连接,CRUD操作

    本文内容: MongoDB的介绍 MongoDB服务端的启动 MongoDB客户端连接 SQL与MongoDB相关概念解释 什么是BSON 数据库操作 集合操作 文档操作 测试环境:win10 软件版 ...

随机推荐

  1. Spring基础之 反射(Reflection)

    1.了解Class package com.inspire.reflection.Class_api; import java.lang.reflect.Constructor; import jav ...

  2. js十大排序算法:冒泡排序

    排序算法说明: (1)对于评述算法优劣术语的说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面:不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面: 内排序:所有排 ...

  3. 【历史】- Windows NT 之父 - David Cutler

    David Cutler,大卫·卡特勒,一位传奇程序员,1988年去微软前号称硅谷最牛的内核开发人员,是VMS和Windows NT的首席设计师,被人们成为“操作系统天神”.他曾供职于杜邦.DEC等公 ...

  4. 无法定位程序输入点 zend_empty_string php7.dll

    phpstudy 在安装php_redis.dll php_redis.pdb 时,需要用到php_igbinary.dll扩展.但我下载的版本不对.下载的是7.2版本的. 所以报以上错误.可选择版本 ...

  5. 【Mysql】—— MySQL存储引擎中的MyISAM和InnoDB区别详解

    在使用MySQL的过程中对MyISAM和InnoDB这两个概念存在了些疑问,到底两者引擎有何分别一直是存在我心中的疑问.为了解开这个谜题,搜寻了网络,找到了如下信息: MyISAM是MySQL的默认数 ...

  6. jq 事件取消绑定与重新绑定

    前端有时会碰到这样的需求: 点击某个元素发送ajax请求, 发送期间此元素的鼠标相关事件(比如点击)无效, 发送完成鼠标点击事件功能恢复, 对于这种需求, 我们会遇到两种情况, 一种是点击的按钮为fo ...

  7. ref、out与params

    ref 把值传递转换为引用传递,侧重于将一个值带到函数中进行改变,再将改变后的值带出去,ref参数在函数外必须为ref参数赋值 ; AddSalary(ref salary); //如果不写ref,s ...

  8. BZOJ4229选择——LCT+并查集+离线(LCT动态维护边双连通分量)

    题目描述 现在,我想知道自己是否还有选择. 给定n个点m条边的无向图以及顺序发生的q个事件. 每个事件都属于下面两种之一: 1.删除某一条图上仍存在的边 2.询问是否存在两条边不相交的路径可以从点u出 ...

  9. MVC 多submit

    直接上代码 3种情况: 第一种,由于form已经可以支持多个了.所以我们分成2个form来提交,submit会根据自己所在的form来提交当前表单的内容 @using (Html.BeginForm( ...

  10. python 时间模块 -- time

    time 时间模块 和时间有关系的我们就要用到时间模块.在使用模块之前,应该先导入模块. # 常用方法 import time print("现在执行我") time.sleep( ...