解决Centos使用ssh连接自动断开
————2024.4.14
最终发现原来是自己给自己挖坑,花生壳内网穿透的问题
在使用Centos7的时候,经常在一段时间没有操作之后就自动断掉了,然后重新连接之后就可能失去了当前操作场景,那么如何才能保证我们即使长时间不操作也会一直保持连接状态,往下看。
第一种方法
也是网上到处都能搜索到的,修改/etc/ssh/sshd_config
文件
使用命令打开/etc/ssh/sshd_config文件:vim /etc/ssh/sshd_config,修改两个参数ClientAliveInterval和ClientAliveCountMax,这两个参数控制了客户端的存活检测间隔和失败检测的最大次数,如果超过了这个次数就断开客户端的连接,默认情况下这两个是未开启的,将其修改为60和5,值自己定
ClientAliveInterval 100
ClientAliveCountMax 15
修改完配置之后重启sshd服务:
systemctl restart sshd
使用该方法修改之后如果还是经常自动断开,那你就看第二种
第二种方法
来自于linvirtshell,是我实际遇到的情况
在服务器自动断开的时候,控制台输出了一个关键语句:
哦吼~这句话很关键喔,尤其是auto-logout,在linvirtshell上有这么一句话:
The ssh “timed out waiting for input: auto-logout” messages is generated by ssh upon reaching a auto-logout after an inactivity time specified by the TMOUT environment variable. If this variable is not set your session will not be auto-logged out due to inactivity. If the environment variable is set, your session will be automatically closed/logged out after the amount of seconds specified by the TMOUT variable.
大致意思是Linux维护了一个TMOUT的环境变量,该环境变量的目的是在ssh客户端在指定时间未活动的话,就自动断开该客户端的连接,单位是秒,那我们输出一下该环境变量看看是不是这货在搞怪。
[root@ci034 ~]# echo $TMOUT
180
果然,180秒未活动就自动断开连接,结合之前每次断开的时间间隔,就是这货在作怪了,那么我们直接修改这个参数试试,设置为30分钟不过期
export TMOUT=1800
经验证,确实有效,那么将其设置到/etc/profile文件中(如果文件中已经有配置了,修改时间即可)
如果想关闭自动断开,想永久不断开的话(不推荐),就从环境变量里面移除掉该参数。
第三种方法:IP地址有冲突
问题原因:服务器的IP地址与局域网内的其他设备IP有冲突。
利用 arping 工具检测查询是否有设备IP有冲突。
安装 arping 工具
yum install arping
在另一台同网段的linux机器B上(比如:129.168.9.200)上执行下面的命令(不能在本机arping检验自己的ip):
[root@dev ~]# arping 192.168.9.120
ARPING 192.168.1.120 from 192.168.9.200 eth0
Unicast reply from 192.168.9.120 [40:F4:EC:76:79:C2] 3.084ms
Unicast reply from 192.168.9.120 [50:7B:9D:25:29:59] 0.817ms
Unicast reply from 192.168.9.120 [50:7B:9D:25:29:59] 0.810ms
........
如果只检查出一个MAC地址,则表示网内A机器的的IP:192.168.9.120是唯一的
如果有以上信息即查出两个MAC地址,则表示网内有一台MAC地址为40:F4:EC:76:79:C2的主机IP地址与A机器相同。
这时可以通过ifconfig命令验证A机器,如下发现:A机器的MAC地址是50:7B:9D:25:29:59 。 我们可以用局域网扫描软件找到MAC地址为40:F4:EC:76:79:C2的主机,并将其隔离或更换IP地址。
第四种方法
我自己挖的坑,我用了花生壳内网穿透功能,映射了主机服务器的22端口,然后我自己忘记了。💩