参数、批量与稳定性相关
1. 批量部署
目标:一次把内核与 14 个官方插件铺到多台终端,并统一配置。
- 打包形态:
build.bat(Windows)或scripts/build_all.sh(CI / Linux)会产出dist/stage/<目标平台>,其目录结构即安装后布局,可直接被 NSIS / deb 打包脚本复用。 - 静默安装:Windows 安装包基于 NSIS,可配合其静默参数批量下发;Linux 提供 deb 包(含 systemd 单元)。
- 统一配置:把
config.json作为配置管理项下发,其中至少统一好listen端口与认证材料。 - 插件分发:官方插件随安装包内置;第三方插件放入数据目录的
plugins/,或用plugins.extra_paths[]指定任意路径。 - 上层收口:终端数量大时,建议上层系统只对接中间层(Agent Server),由中间层负责把命令路由到具体终端,避免逐台维护地址与令牌。
2. 长时间运行(无人值守)
- 自启动:Windows 安装包会把内核注册为系统服务
FoxAgent(启动类型「自动」),随开机自启,不需要用户登录;同时清理旧版写入的当前用户开机启动项,避免与服务抢端口。Linux 当前为前台模式,需自行配合nohup或进程管理器守护。 - 无人值守下的交互能力:音量 / 屏幕 / 键鼠 / 剪贴板 / 桌面提示 / 截图属于
user会话域。内核以服务(Session 0)运行时会把这些插件跨会话创建到当前登录用户的会话中,因此服务态下依然可用;只有在终端无人登录(没有可依附的用户会话)时才不可用,/capabilities会标注原因。 - 进程守护:内核会守护插件子进程——插件异常退出按 1s / 2s / 4s 退避重启,连续失败达上限后停止并标记
Failed。 - 内存释放:建议对查询终端、自助机配置定时重启(用
power.reboot命令周期性下发),这也是常见用法。 - 崩溃恢复:Windows 下内核作为服务常驻,异常退出由 SCM 按恢复策略自动重启,无需人工介入;Linux 前台模式下建议由上层监控
/health,失联时重新拉起进程。 - 优雅退出:收到中断信号后,内核会先关闭传输层、再清理插件进程,避免留下孤儿进程。
3. 权限与安全
FoxAgent 没有账号体系,安全由三层凭据承担,按强度从高到低:
| 方式 | 适用范围 | 说明 |
|---|---|---|
| mTLS 客户端证书 | 需 TLS 的 HTTP / TCP | 证书私钥不可被网页读取,天然免疫 CSRF |
| 应用层 HMAC 签名 | HTTP / TCP / UDP 通用 | UDP 唯一可用的远程凭据,密钥不上线路 |
| 访问令牌 | HTTP 走头 X-Auth-Token,TCP/UDP 走报文字段 token |
首次启动自动生成 |
- 回环免认证:
127.0.0.1/::1默认免认证,但叠加 Origin / Referer / Host 校验;同时高危命令(power.*、screen.*、input.*、clipboard.*、process.kill、timesync.set、notify.toast)即使来自回环也强制认证。内核会把内置默认清单与config.json的auth.high_risk_commands做并集合并并回写,因此覆盖安装后新增的高危命令自动生效、无需手改配置;可在配置里追加自定义项,但不能靠删配置项缩小保护范围。 - 管理端点例外:
/admin/*与GET /blob/{id}无论来源一律要求令牌或证书,不接受回环免认证;/health、/capabilities为免认证。Web 控制台页面本身为静态资源可直接打开,但页内每个管理请求都要带令牌,故不会因「浏览器能打开页面」而暴露管理能力。 - 拦截链失败方向:命令前钩子(守卫插件)超时、崩溃或返回错误时默认按拒绝处理(fail-closed),避免安全策略静默失效;代价是守卫不可用时全部命令都会被拒。可用配置项
events调整: events.intercept_fail_open(默认false):置true后守卫失败时放行,用于「可用性优先」的现场。events.breaker_failures/events.breaker_cooldown_ms:某守卫连续失败达阈值即熔断,冷却期内不再等待超时,避免单个守卫故障拖垮整条命令链。- 插件可访问范围:
fox.file(文件读取)与fox.log(日志查看)为只读插件,可访问路径由plugins.config["fox.file"].roots/plugins.config["fox.log"].paths白名单限定,白名单为空即拒绝一切访问;fox.log默认指向内核自身日志目录<数据目录>/logs,装上即可用。 - 启用 HMAC:
fox-agent hmac init生成密钥并启用;fox-agent hmac status查看状态;轮换用fox-agent hmac init --force。默认时间窗 300 秒。声明启用但密钥非法时,内核启动阶段即失败,不会带病运行。 - 启用 mTLS:
fox-agent tls init生成 CA 与控制台客户端证书,再在配置中打开tls.enabled与tls.require_client_cert;fox-agent tls status查看状态。 - 插件目录权限:内核会校验插件目录权限(Linux 属主 / Windows DACL),防止低权限用户替换插件。
4. 性能与稳定性
| 项 | 说明 |
|---|---|
| 并发 | 三个传输层独立监听、并行处理,命令处理无全局锁 |
| 请求体上限 | HTTP / TCP 单条 4KB;UDP 单包 2048 字节 |
| 心跳 | 插件心跳默认 10 秒,连续多个周期缺失判定不健康并终止 |
| 握手超时 | 插件启动握手有超时保护,可用 plugins.handshake_ms 调整 |
| 资源占用 | 内核轻量常驻;每个能力对应一个独立插件子进程 |
| 建议配置 | 常规办公 / 展厅终端无需特殊配置;无需独立服务器 |
5. 离线环境部署
- 在联网环境执行构建,得到
dist/stage/<目标平台>或安装包。 - 把安装包与需要下发的配置(含令牌或 HMAC 密钥、证书)一并拷入现场。
- 现场离线安装,安装包不会访问公网。
- 如需启用 TLS / HMAC,离线生成材料后离线分发:
fox-agent tls init/fox-agent hmac init均在本地完成,不需要联网。 - 升级同样走离线覆盖安装,不依赖在线更新通道。
6. 典型故障排查(现象 → 原因 → 处理)
| 现象 | 原因 | 处理 |
|---|---|---|
| 非回环请求一律 401 | 未启用签名且未带令牌,或启用签名后未带 sig/ts/nonce |
带上 X-Auth-Token;或双方配置同一密钥并正确签名 |
| 启用签名后全部认证失败 | 调用方与终端时钟偏差超出时间窗 | 校准时钟,或调大 auth.hmac.window_seconds |
| 签名总是「对不上」 | canonicalBody 未按「剔除三字段后重新序列化」生成 |
先剔除 sig/ts/nonce 再序列化后签名 |
命令返回 skipped |
mac 与本机不匹配 |
填 all 或填目标机真实 MAC |
命令返回 error 且提示 MAC 获取失败 |
本机无可用的物理网卡 | 检查网卡 / 驱动;程序在无法判断时不冒险执行 |
| 音量 / 键鼠 / 剪贴板 / 桌面提示 / 截图等交互类能力无效 | 终端当前无人登录(没有可依附的用户桌面会话) | 让终端登录一个用户会话后重试;服务态本身支持这些能力(跨会话注入),查看 /capabilities 的 reason |
插件显示 Failed |
插件崩溃且退避重启已达上限 | fox-agent plugin doctor 定位,修复后 plugin start |
| 启动即报配置错误 | HMAC 声明启用但密钥非法(fail-closed) | 重新 fox-agent hmac init 生成合法密钥 |