Skip to content

功能特性

智能版本检测

多策略版本获取,灵活适应不同部署环境:

  • 本地检测 — 读取 sshd -V 解析当前版本号
  • API 服务端 — 从管理平台获取允许版本和最新包地址,服务端自动同步阿里云或手动上传
  • 灰度升级--experimental 标记设备为灰度(canary)节点,优先获取最新版本验证,验证通过后晋升为稳定版再推全
  • 版本比较 — 语义化版本比较,支持 v2.3.1 格式

灰度升级(Canary Release)

生产环境中最怕最新版 OpenSSH 存在兼容性问题导致批量失联。灰度升级机制允许管理员挑选小部分设备先行验证最新版本,确认稳定后再推广到全部设备,将风险控制在最小范围。

工作原理

  1. 选取灰度节点 — 管理员在有专业版及以上许可证的管理平台上,为部分设备生成带 --experimental 标志的启动命令
  2. 优先升级 — 灰度节点启动后从服务端获取最新 OpenSSH 版本,立即编译安装
  3. 结果追踪 — 灰度节点上报升级结果到服务端,服务端自动记录每个节点的成功/失败状态
  4. 自动晋升 — 当灰度节点全部升级成功(按 experimental_promotion 策略判定),该版本自动晋升为 stable(稳定版)
  5. 全量推发 — 其余非灰度设备升级时只获取 stable 版本,确保永不接触未经验证的最新版

晋升策略

通过管理平台的 experimental_promotion 设置控制晋升条件:

策略晋升条件适用场景
all(默认)所有灰度节点均成功且无任何失败严格模式,适合核心生产环境
any至少一个灰度节点成功宽松模式,适合测试环境快速验证

一次典型灰度升级流程

1. 管理员选择 5 台设备 → 标记为灰度节点(--experimental)
2. 灰度节点升级到 OpenSSH 9.8p1 → 全部成功
3. 服务端自动将 9.8p1 标记为 stable
4. 剩余 100 台设备升级时获取 9.8p1(stable)→ 安全完成

如灰度节点升级失败,该版本不会晋升,其余设备不会接触该版本,避免批量失联。

版本限制

版本支持情况
免费版❌ 不支持。始终获取最新稳定版,无法选择灰度节点
专业版✅ 支持灰度升级
旗舰版✅ 支持灰度升级
至尊版✅ 支持灰度升级,管理员可远程开关此功能

安全升级流水线

完整的 11 步编译安装流程,兼顾效率与安全:

  • 升级前自动备份 /etc/ssh/sshd_config 到快照目录
  • 编译参数:--prefix=<dir> --sysconfdir=/etc/ssh --with-pam --with-zlib --with-ssl-dir=/usr
  • 安装后验证:文件存在性 → sshd -t 语法检查 → 随机高端口启动测试
  • 支持 -auto-restart=false 禁用安装后的自动重启
  • 版本不匹配自动检测:比较安装版本与运行版本(通过 SSH 端口 banner),不一致时自动重启

全自动依赖管理

自动识别 Linux 发行版并安装编译依赖:

bash
# Ubuntu/Debian 自动安装
gcc make autoconf automake libtool pkg-config

# CentOS/RHEL 自动安装
gcc make autoconf automake libtool
  • 基于 glpm 通用包管理器检测发行版
  • 自动安装缺失的 PAM/zlib/OpenSSL 开发头文件
  • 无需手动安装任何依赖包

五层守护恢复

内置 SSH Guardian,持续监控 SSH 服务健康状态,检测间隔可配置(默认 180 秒):

  1. 重启 sshd 服务
  2. systemctl restart sshd
  3. 从备份恢复 SSH 二进制 + 符号链接 + 重启
  4. 回退旧版 ssh 服务(Debian 命名兼容)
  5. 直接执行 sshd -D 二进制

升级期间自动暂停守护,避免冲突。

SSH 内存泄露检测

持续监控 sshd 和 sshd-session 进程内存使用:

  • 读取 /proc/<pid>/status 获取 RSS 内存
  • 连续 3 次采样总增长 ≥ 5MB 时触发告警
  • 帮助提前发现内存泄露问题

客户端自升级

支持客户端二进制自动升级,--self-upgrade 启用:

  • 从管理平台获取最新客户端版本和二进制
  • SHA256 校验下载完整性
  • 验证新二进制可执行且版本正确
  • 原子替换(rename(2))避免 ETXTBSY 错误
  • 旧二进制备份为 .bak 后缀
  • 依赖 systemd Restart=always 自动以新版本重启

版本限制

客户端自升级功能仅 旗舰版至尊版 支持,基础免费版和专业版不支持此功能。

访问IP控制

通过 IP 白名单限制管理平台登录和客户端上报的访问来源:

  • 登录IP白名单 — 限制哪些 IP 可以登录管理后台
  • 上报IP白名单 — 限制哪些 IP 可以向服务端上报状态
  • 支持精确 IP 和 CIDR 网段格式
  • 留空或 0.0.0.0/0 表示不限制

版本限制

访问IP控制功能仅 专业版旗舰版至尊版 支持。免费版不限制 IP 访问,所有 IP 均允许。

双通道状态上报

HTTP + WebSocket 双通道上报客户端状态:

  • HTTP 上报:周期 POST 至 /api/client/report,最多 3 次重试
  • WebSocket 上报:持久连接 /ws/client,15 秒心跳保活,3 次重连
  • 上报内容:IP 地址、主机名、操作系统、SSH 版本、运行状态、SSH 端口、进程内存

服务注册管理

一键注册为 systemd 系统服务:

  • 复制二进制到 /usr/local/bin/
  • 创建 systemd 单元:Restart=alwaysType=simple
  • 保留所有非默认 CLI 参数
  • 安全检测:当 RootLogin=no 时列出普通用户并确认
  • 支持卸载:停止 → 禁用 → 删除单元 → 删除二进制

失败指数退避

连续检测失败时自动增大检测间隔:

1h → 2h → 4h → 8h(最高)

成功检测后恢复为配置的基准间隔。

跨午夜时间窗口

支持跨午夜的升级时间段配置:

bash
# 示例:22:00 至次日 06:00
-t 22:00:00-06:00:00

校验和验证

下载的源码包进行完整性校验:

  • 支持 SHA256 / MD5 / SHA1 / SHA512
  • 支持标准校验和文件格式解析(SHA256SUMS / MD5SUMS)
  • 支持校验和文件生成

SSH 配置管理

/etc/ssh/sshd_config 进行全面的配置管理:

  • PermitRootLogin — 检测和设置 root 登录状态
  • PasswordAuthentication — 检测和设置密钥登录状态
  • AllowUsers — 检测和设置 IP 白名单(支持 CIDR 格式)
  • 正则替换方式修改配置,保留文件注释和格式
  • 支持 --use-original-config 选择是否保留原始配置文件

客户端配置下发

通过管理平台远程配置客户端 SSH 参数,无需登录每台服务器手动修改:

  • Root 登录控制 — 远程设置 PermitRootLoginyesno
  • 密钥登录控制 — 远程设置 PasswordAuthentication,切换仅密钥/密码登录
  • SSH IP 白名单 — 远程设置 AllowUsers,限制允许 SSH 连接的来源 IP(支持逗号分隔多 IP)

工作流程

管理平台下发配置 → 服务端保存待下发记录 → WebSocket 推送 config:apply 指令
    → 客户端收到指令触发立即上报 → 拉取待下发配置 → 修改 sshd_config → 重启 SSH 服务
    → 配置持久化到 /etc/ssh-go-automatic-upgrade/config.toml → 发送 config:ack 确认
  • WebSocket 实时推送,下发后客户端秒级响应
  • 配置变更后自动重启 SSH 服务使其生效
  • 客户端本地持久化 TOML 配置文件,服务重启后仍保留

版本限制

  • 单设备配置下发:旗舰版 和 至尊版 支持
  • 批量配置下发:仅 至尊版 支持
  • 专业版免费版 不支持

本地状态持久化

客户端运行状态持久化到 client-state.json

  • 上次检测时间、状态、错误
  • 上次升级 URL 和升级次数
  • SSH 内存历史记录
  • 用于服务重启后恢复运行上下文

PID 文件守护

防止同一主机上运行多个客户端实例:

  • 创建 PID 文件到数据目录
  • 通过 /proc/<pid>/cmdline 验证进程身份
  • 进程退出时自动清理