Skip to content

功能特性

智能版本检测

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

  • 本地检测 — 读取 sshd -V 解析当前版本号
  • 镜像爬取 — 解析镜像源 HTML 目录列表,自动获取最新版本
  • API 服务端 — 通过 --use-api 启用,从管理平台获取允许版本和最新包地址
  • 实验性特性--experimental 跳过服务端版本限制,直接从镜像获取预发布版本
  • 版本比较 — 语义化版本比较,支持 v2.3.1 格式

安全升级流水线

完整的 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 自动以新版本重启

双通道状态上报

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 选择是否保留原始配置文件

本地状态持久化

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

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

PID 文件守护

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

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

基于 MIT 许可证发布