如何解决ssh总是掉线的问题

配置服务端:

ClientAliveInterval  

设置一个以秒记的时长,如果超过这么长时间没有收到客户端的任何数据,sshd 将通过安全通道向客户端发送一个”alive”消息,并等候应答。默认值 0 表示不发送”alive”消息。这个选项仅对SSH-2有效。ClientAliveInterval指定了服务器端向客户端请求消息的时间间隔, 默认是0, 不发送.而ClientAliveInterval 60表示每分钟发送一次, 然后客户端响应, 这样就保持长连接了.

ClientAliveCountMax  

sshd 在未收到任何客户端回应前最多允许发送多少个”alive”消息。默认值是 3 。到达这个上限后,sshd 将强制断开连接、关闭会话。需要注意的是,”alive”消息与 TCPKeepAlive 有很大差异。“alive”消息是通过加密连接发送的,因此不会被欺骗;而 TCPKeepAlive 却是可以被欺骗的。如果 ClientAliveInterval 被设为 15 并且将 ClientAliveCountMax 保持为默认值, 那么无应答的客户端大约会在45秒后被强制断开。这个指令仅可以用于SSH-2协议.

配置客户端:

#vi /etc/ssh/ssh_config

然后找到里面的
ServerAliveInterval

参数,如果没有,你同样自己加一个就好了,参数意义相同,都是秒数,比如5分钟等。

ServerAliveInterval 300

客户端也可以配置ServerAliveCountMax

在客户端和服务端都可以配置

TCPKeepAlive yes

还有人说要关闭SELinux,在网上看到这个东西貌似没什么用而且学习成本比较大,不如直接关掉

查看SELinux状态:

1、/usr/sbin/sestatus -v      ##如果SELinux status参数为enabled即为开启状态

SELinux status:                 enabled

2、getenforce                 ##也可以用这个命令检查

关闭SELinux:

1、临时关闭(不用重启机器):

setenforce 0                  ##设置SELinux 成为permissive模式

                              ##setenforce 1 设置SELinux 成为enforcing模式

2、修改配置文件需要重启机器:

修改/etc/selinux/config 文件

将SELINUX=enforcing改为SELINUX=disabled

重启机器即可


也可以使用mosh,Mosh 是 SSH 的替代品。在高延迟的网络下,Mosh 比 SSH 流畅多了,而且3G网络下,丢失网络变更IP后,终端连接不会中断。



你可能感兴趣的:(ssh)