Appearance
功能特性
智能版本检测
多策略版本获取,灵活适应不同部署环境:
- 本地检测 — 读取
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 秒):
- 重启 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自动以新版本重启
双通道状态上报
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选择是否保留原始配置文件
本地状态持久化
客户端运行状态持久化到 client-state.json:
- 上次检测时间、状态、错误
- 上次升级 URL 和升级次数
- SSH 内存历史记录
- 用于服务重启后恢复运行上下文
PID 文件守护
防止同一主机上运行多个客户端实例:
- 创建 PID 文件到数据目录
- 通过
/proc/<pid>/cmdline验证进程身份 - 进程退出时自动清理