一个面向个人和小团队服务器的安全 Agent 运维托管控制面。
它的目标不是“给 AI 一个 root 密码”,而是把 Agent 放进一套有权限边界、有审计、有撤销机制的运维系统里:
- 一条命令接入服务器
- 私有组网连接节点
- A/B/C 分级托管
- Playbook 化执行低风险运维动作
- Telegram / API 审批高风险动作
- 自动巡检与有限自愈
- 自动沉淀机器、服务、域名文档
当前分支提供可运行的控制面 MVP:join token、节点登记、心跳/worker、任务队列、审计、组件状态框架。
Telegram / Web Console
↓
Hermes Master
- 指令理解
- 审批策略
- 节点清单
- Task / Component 调度
- 审计日志
- 文档同步
↓
Task Engine
- Worker Queue
- Cron 巡检
- Component Lifecycle
↓
Managed Nodes
- hermes 用户
- node.env 指纹
- heartbeat / optional worker
↓
Docs / Backup / Monitor
已打通:
- 本地 FastAPI controller
- SQLite 存储
- 一次性 join token
- 节点 join / confirm / revoke
- 节点 heartbeat
- 安全模式 worker
- task 下发、轮询、result 回传
- audit log
- 内置组件 manifest / lifecycle 状态闭环
暂不包含:
- 默认远程 shell 执行
- 高风险自动执行
- token 过期/撤销完整运维策略
- 多平台 worker 安装器
- 真实组件 apply 驱动
python -m venv .venv
. .venv/bin/activate
python -m pip install -e '.[dev]'查看版本:
hmn versionHMN_DB=/tmp/hmn-demo.db \
uvicorn 'hermes_managed_network.api:create_app' \
--factory \
--host 127.0.0.1 \
--port 8765健康检查:
curl -sS http://127.0.0.1:8765/healthz
curl -sS http://127.0.0.1:8765/api/v1/versionHMN_DB=/tmp/hmn-demo.db hmn token create --trust B --label worker也可以用交互式接入向导:
HMN_DB=/tmp/hmn-demo.db \
HMN_PUBLIC_URL=http://127.0.0.1:8765 \
hmn wakehmn wake 会生成一个一次性 token,并输出可复制到节点执行的安全接入命令。
HMN_DB=/tmp/hmn-demo.db \
hmn token join-command <TOKEN> \
--master-url http://127.0.0.1:8765 \
--safe输出命令会下载 controller 暴露的 /scripts/join.sh,并要求节点侧提供:
HERMES_JOIN_TOKENHERMES_MASTER_URLHERMES_USER,默认hermes
接入成功后节点进入 pending。
HMN_DB=/tmp/hmn-demo.db hmn node list
HMN_DB=/tmp/hmn-demo.db hmn node confirm
HMN_DB=/tmp/hmn-demo.db hmn node status如果只有一个 pending 节点,hmn node confirm 会自动选择。
HMN_DB=/tmp/hmn-demo.db \
hmn node install-heartbeat --master-url http://127.0.0.1:8765把输出的一条命令复制到目标节点执行。它会:
- 写入
/etc/hermes-managed-network/node.env - 下载
/scripts/worker.sh到/usr/local/bin/hmn-worker - 安装
hermes-managed-network-heartbeat.timer - 默认保持安全模式:
HMN_ENABLE_EXEC=0
默认 worker 只做两件事:
- 上报 heartbeat / worker facts
- 拉取 pending task 并回传结果
默认不会执行下发的 shell 命令。
当 HMN_ENABLE_EXEC!=1 时,worker 收到任务后会回传:
exit_code=126stderr=execution disabled; set HMN_ENABLE_EXEC=1- task 状态进入
failed
只有在节点侧显式设置:
HMN_ENABLE_EXEC=1worker 才会执行任务命令。
当前服务发现结果会落到 DB service registry;deploy/docs/uptime/console 都从同一份服务事实源读取,默认只生成 dry-run / approval-gated 计划,不直接触达生产外部系统:
HMN_DB=/tmp/hmn-demo.db hmn service discover --node-id demo --apply --json
HMN_DB=/tmp/hmn-demo.db hmn deploy plan --db /tmp/hmn-demo.db --json
HMN_DB=/tmp/hmn-demo.db hmn docs sync plan --db /tmp/hmn-demo.db --json
HMN_DB=/tmp/hmn-demo.db hmn uptime plan --db /tmp/hmn-demo.db --json
curl http://127.0.0.1:8765/api/v1/console/servicesJSON registry 文件仍可用于离线导入/演示,但 DB service registry 是控制面内 deploy/docs/uptime/console 的共享入口。
向唯一 managed 节点下发一条低风险 shell 任务:
HMN_DB=/tmp/hmn-demo.db hmn task run 'uptime'
HMN_DB=/tmp/hmn-demo.db hmn task list节点 worker 下一次轮询会请求:
POST /api/v1/nodes/{node_id}/tasks/next执行或安全拒绝后回传:
POST /api/v1/tasks/{task_id}/result查看审计:
HMN_DB=/tmp/hmn-demo.db hmn audit list在 Linux/systemd 主控机上:
curl -fsSL https://raw.githubusercontent.com/liut-coder/hermes-managed-network/main/install.sh | sudo bash更新已安装主控同样执行上面的命令。
hmn:打开交互式控制台hmn menu --plain:打印快捷菜单hmn wake:接入新机器hmn token create:创建一次性 tokenhmn token join-command <TOKEN> --master-url <URL> --safe:生成节点接入命令hmn node list:查看节点hmn node confirm:确认 pending 节点hmn node status:查看节点详情hmn node doctor:本地控制面检查hmn node heartbeat-command:生成心跳 curlhmn node install-heartbeat:生成 worker 安装命令hmn node worker-status:查看 worker 上报状态hmn service discover --db ... --apply:把发现结果写入 DB service registryhmn deploy plan --db ...:从 DB service registry 生成部署 dry-runhmn docs sync plan --db ...:从 DB service registry 生成 docs-center 同步计划hmn uptime plan --db ...:从 DB service registry 生成 Uptime Kuma create/update/skip 计划GET /api/v1/console/services:查看 DB service records 摘要hmn task run 'uptime':下发低风险 shell 任务hmn task list:查看任务状态hmn component list:查看组件hmn component plan/apply/verify/uninstall:组件生命周期 MVPhmn audit list:查看审计hmn version:查看版本hmn update:输出更新命令hmn uninstall:输出/执行卸载命令
- 全托管不等于全权限
- 能连上不等于全网互信
- 高风险动作必须审批
- 所有动作必须审计
- 所有资产必须可反查
- 节点接入凭证必须短期、一次性、可撤销
MIT
