保持 SSH 连接不中断的完整方案:客户端与服务端配置
使用 SSH 连接服务器时,若长时间无操作,连接常因超时被自动断开,需重新登录,影响工作效率。本文将从客户端(Linux/Mac/Windows)和服务端两个维度,详细介绍如何通过配置保持 SSH 连接长期稳定。
客户端配置(主动发送保活信号)
客户端配置的核心是定期向服务器发送 “保活消息”,避免连接因超时被断开。
Linux 或 Mac 客户端(终端直接连接)
(1)全局配置(对所有服务器生效)
1 | # 编辑 SSH 客户端配置文件 |
添加以下内容:
1 | # 对所有服务器生效(* 表示通配符) |
(2)局部配置(仅对特定服务器生效)
若只需对某台服务器保持连接,可指定服务器 IP 或域名:
1 | # 仅对 192.168.1.100 生效 |
(3)配置说明
ServerAliveInterval:保活消息发送间隔(秒),建议设置为 60-300 秒(根据服务器超时时间调整)。ServerAliveCountMax:允许的最大无响应次数。
总存活时间 = ServerAliveInterval × ServerAliveCountMax(例如 120×30=3600 秒 = 1 小时)。
Windows 客户端(通过 SSH 工具连接)
Windows 用户通常使用图形化工具(如 Xshell、FinalShell、Putty)连接 SSH,需在工具中开启 “保活” 功能:
(1)Xshell 配置
- 打开会话属性(右键会话 → 属性);
- 导航到「连接 → 保持活动」;
- 勾选 “发送保持活动消息”,设置间隔为 60-120 秒;
- 点击 “确定” 保存。
(2)FinalShell 配置
- 右键连接 → 编辑;
- 在「高级」选项卡中,找到 “连接保活”;
- 勾选 “启用”,设置间隔为 120 秒;
- 保存配置。
(3)Putty 配置
- 启动 Putty,在左侧导航栏选择「Connection」;
- 在「Seconds between keepalives」中输入 120;
- 点击「Open」连接,或保存会话以便下次使用。
服务端配置(主动检测客户端活性)
服务端配置通过 定期向客户端发送 “心跳检测”,若客户端长期无响应,则主动断开连接(可延长检测间隔避免误判)。
编辑 SSH 服务端配置文件
1 | # 编辑 sshd 配置(需 root 权限) |
调整保活相关参数
找到以下参数(若无则手动添加):
1 | # 启用 TCP 保活机制(默认开启) |
参数说明
TCPKeepAlive:基于 TCP 层的保活检测(底层机制),建议保持yes。ClientAliveInterval:服务端向客户端发送保活消息的间隔(秒)。ClientAliveCountMax:允许的最大无响应次数。
服务端允许的最大空闲时间 = ClientAliveInterval × ClientAliveCountMax(例如 120×30=3600 秒)。
重启 SSH 服务使配置生效
1 | # CentOS/RHEL 系统 |
最佳实践:客户端与服务端配合
为确保连接稳定,建议同时配置客户端和服务端,并遵循以下原则:
- 客户端保活间隔 ≤ 服务端超时时间
例如:客户端ServerAliveInterval=120秒,服务端ClientAliveInterval=300秒,避免客户端未发消息前被服务端断开。 - 根据网络环境调整间隔
- 内网环境:可适当延长间隔(如 300 秒),减少不必要的通信。
- 公网环境:建议缩短间隔(如 60-120 秒),避免因网络波动导致误判。
- 避免过度保活
间隔过短(如 10 秒)会增加网络和服务器负担,建议不小于 60 秒。
常见问题排查
- 配置后仍频繁断开
- 检查客户端与服务端配置是否冲突(如客户端间隔大于服务端超时)。
- 排查中间网络设备(如路由器、防火墙)是否有独立的超时设置(可能覆盖 SSH 保活配置)。
- 保活消息无效
- 确认
sshd_config中ClientAliveInterval未被注释(去掉行首的#)。 - 客户端配置文件
~/.ssh/config权限是否正确(应为600,可通过chmod 600 ~/.ssh/config修复)。
- 确认
通过上述配置,SSH 连接可在无操作时保持数小时甚至数天不中断,大幅提升远程操作效率