功能特性
智能版本检测
多策略版本获取,灵活适应不同部署环境:
- 本地检测 — 读取
sshd -V解析当前版本号 - API 服务端 — 从管理平台获取允许版本和最新包地址,服务端自动同步阿里云或手动上传
- 灰度升级 —
--experimental标记设备为灰度(canary)节点,优先获取最新版本验证,验证通过后晋升为稳定版再推全 - 版本比较 — 语义化版本比较,支持
v2.3.1格式
灰度升级(Canary Release)
生产环境中最怕最新版 OpenSSH 存在兼容性问题导致批量失联。灰度升级机制允许管理员挑选小部分设备先行验证最新版本,确认稳定后再推广到全部设备,将风险控制在最小范围。
工作原理
- 选取灰度节点 — 管理员在有专业版及以上许可证的管理平台上,为部分设备生成带
--experimental标志的启动命令 - 优先升级 — 灰度节点启动后从服务端获取最新 OpenSSH 版本,立即编译安装
- 结果追踪 — 灰度节点上报升级结果到服务端,服务端自动记录每个节点的成功/失败状态
- 自动晋升 — 当灰度节点全部升级成功(按
experimental_promotion策略判定),该版本自动晋升为 stable(稳定版) - 全量推发 — 其余非灰度设备升级时只获取 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 秒):
- 重启 sshd 服务
systemctl restart sshd- 从备份恢复 SSH 二进制 + 符号链接 + 重启
- 回退旧版 ssh 服务(Debian 命名兼容)
- 直接执行
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=always、Type=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 登录控制 — 远程设置
PermitRootLogin为yes或no - 密钥登录控制 — 远程设置
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验证进程身份 - 进程退出时自动清理