0%

如何保持ssh连接

保持 SSH 连接不中断的完整方案:客户端与服务端配置

使用 SSH 连接服务器时,若长时间无操作,连接常因超时被自动断开,需重新登录,影响工作效率。本文将从客户端(Linux/Mac/Windows)和服务端两个维度,详细介绍如何通过配置保持 SSH 连接长期稳定。

客户端配置(主动发送保活信号)

客户端配置的核心是定期向服务器发送 “保活消息”,避免连接因超时被断开。

Linux 或 Mac 客户端(终端直接连接)

(1)全局配置(对所有服务器生效)
1
2
# 编辑 SSH 客户端配置文件
vi ~/.ssh/config

添加以下内容:

1
2
3
4
5
6
# 对所有服务器生效(* 表示通配符)
Host *
# 每 120 秒向服务器发送一次保活消息(检查连接是否存活)
ServerAliveInterval 120
# 最多允许 30 次未收到服务器响应(超过则断开连接)
ServerAliveCountMax 30
(2)局部配置(仅对特定服务器生效)

若只需对某台服务器保持连接,可指定服务器 IP 或域名:

1
2
3
4
5
6
7
8
9
# 仅对 192.168.1.100 生效
Host 192.168.1.100
ServerAliveInterval 60 # 更频繁发送保活消息(60秒/次)
ServerAliveCountMax 60

# 对所有以 .example.com 结尾的域名生效
Host *.example.com
ServerAliveInterval 90
ServerAliveCountMax 20
(3)配置说明
  • ServerAliveInterval:保活消息发送间隔(秒),建议设置为 60-300 秒(根据服务器超时时间调整)。
  • ServerAliveCountMax:允许的最大无响应次数。
    总存活时间 = ServerAliveInterval × ServerAliveCountMax(例如 120×30=3600 秒 = 1 小时)。

Windows 客户端(通过 SSH 工具连接)

Windows 用户通常使用图形化工具(如 Xshell、FinalShell、Putty)连接 SSH,需在工具中开启 “保活” 功能:

(1)Xshell 配置
  1. 打开会话属性(右键会话 → 属性);
  2. 导航到「连接 → 保持活动」;
  3. 勾选 “发送保持活动消息”,设置间隔为 60-120 秒;
  4. 点击 “确定” 保存。
(2)FinalShell 配置
  1. 右键连接 → 编辑;
  2. 在「高级」选项卡中,找到 “连接保活”;
  3. 勾选 “启用”,设置间隔为 120 秒;
  4. 保存配置。
(3)Putty 配置
  1. 启动 Putty,在左侧导航栏选择「Connection」;
  2. 在「Seconds between keepalives」中输入 120;
  3. 点击「Open」连接,或保存会话以便下次使用。

服务端配置(主动检测客户端活性)

服务端配置通过 定期向客户端发送 “心跳检测”,若客户端长期无响应,则主动断开连接(可延长检测间隔避免误判)。

编辑 SSH 服务端配置文件

1
2
# 编辑 sshd 配置(需 root 权限)
sudo vi /etc/ssh/sshd_config

调整保活相关参数

找到以下参数(若无则手动添加):

1
2
3
4
5
6
7
8
# 启用 TCP 保活机制(默认开启)
TCPKeepAlive yes

# 每 120 秒向客户端发送一次保活消息
ClientAliveInterval 120

# 最多允许 30 次未收到客户端响应(超过则断开)
ClientAliveCountMax 30
参数说明
  • TCPKeepAlive:基于 TCP 层的保活检测(底层机制),建议保持 yes
  • ClientAliveInterval:服务端向客户端发送保活消息的间隔(秒)。
  • ClientAliveCountMax:允许的最大无响应次数。
    服务端允许的最大空闲时间 = ClientAliveInterval × ClientAliveCountMax(例如 120×30=3600 秒)。

重启 SSH 服务使配置生效

1
2
3
4
5
6
7
# CentOS/RHEL 系统
sudo systemctl reload sshd
# 或
sudo service sshd reload

# Ubuntu/Debian 系统
sudo systemctl reload ssh.service

最佳实践:客户端与服务端配合

为确保连接稳定,建议同时配置客户端和服务端,并遵循以下原则:

  1. 客户端保活间隔 ≤ 服务端超时时间
    例如:客户端 ServerAliveInterval=120 秒,服务端 ClientAliveInterval=300 秒,避免客户端未发消息前被服务端断开。
  2. 根据网络环境调整间隔
    • 内网环境:可适当延长间隔(如 300 秒),减少不必要的通信。
    • 公网环境:建议缩短间隔(如 60-120 秒),避免因网络波动导致误判。
  3. 避免过度保活
    间隔过短(如 10 秒)会增加网络和服务器负担,建议不小于 60 秒。

常见问题排查

  1. 配置后仍频繁断开
    • 检查客户端与服务端配置是否冲突(如客户端间隔大于服务端超时)。
    • 排查中间网络设备(如路由器、防火墙)是否有独立的超时设置(可能覆盖 SSH 保活配置)。
  2. 保活消息无效
    • 确认 sshd_configClientAliveInterval 未被注释(去掉行首的 #)。
    • 客户端配置文件 ~/.ssh/config 权限是否正确(应为 600,可通过 chmod 600 ~/.ssh/config 修复)。

通过上述配置,SSH 连接可在无操作时保持数小时甚至数天不中断,大幅提升远程操作效率

欢迎关注我的其它发布渠道