ssh 远程不操作自动掉线问题解决

2016/12/6 posted in  linux
  • release

问题情况

在使用ssh的时候,会经常出现packet_write_wait: Connection to 121.41.8.92 port 22: Broken pipe 这样的报错,表示ssh太长时间没有进行操作了。 这在一定程度上增加了ssh的安全性,但是对我们的使用来说会比较麻烦。

在内网和远程环境同时使用的时候,会发现,通过内网ip访问的ssh,比如192.168这样的网段来访问的时候,ssh不管放多久都不会掉,但是公网的ip上的ssh时间一长就会掉。

解决方法

在_etc_ssh/sshd_config文件里添加以下两行:

ClientAliveInterval 15  
ClientAliveCountMax 45 

重启sshd服务

#/etc/init.d/sshdrestart 

ClientAliveInterval设置一个以秒记的时长,如果超过这么长时间没有收到客户端的任何数据,

sshd将通过安全通道向客户端发送一个”alive”消息,并等候应答。

默认值0表示不发送”alive”消息。这个选项仅对SSH-2有效。

ClientAliveCountMaxsshd在未收到任何客户端回应前最多允许发送多少个”alive”消息。默认值是3。

到达这个上限后,sshd将强制断开连接、关闭会话。

需要注意的是,”alive”消息与TCPKeepAlive有很大差异。

“alive”消息是通过加密连接发送的,因此不会被欺骗;而TCPKeepAlive却是可以被欺骗的。

如果ClientAliveInterval被设为15并且将ClientAliveCountMax保持为默认值,那么无应答的客户端大约会在45秒后被强制断开。这个指令仅可以用于SSH-2协议.

推荐配置

一般我推荐把这个时间设置得更长,方便使用

ClientAliveInterval 15  
ClientAliveCountMax 10000

重启ssh服务

#/etc/init.d/ssh restart