Files
Nexus/docs/audit/2026-06-08-servers-batch-execution-records-credentials.md
T
Nexus Agent 08a0157c95 feat: 调度表单重构、登录门控、批量任务与页面缓存对齐
调度页执行周期可视化/单次执行/分类选机/推送源对齐;登录 IP 门控与无缝导航;
服务器批量后台任务、执行记录、凭据合并、各页激活刷新与错误提示修复。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-08 11:17:21 +08:00

5.2 KiB
Raw Blame History

审计 — 服务器批量任务 · 执行记录 · 凭据合并(2026-06-08

Changelog:

  • docs/changelog/2026-06-08-server-batch-background-jobs.md
  • docs/changelog/2026-06-08-server-batch-job-persist.md
  • docs/changelog/2026-06-08-install-agent-auto-api-key.md
  • docs/changelog/2026-06-08-agent-install-bt-pyenv-python.md
  • docs/changelog/2026-06-08-unified-execution-records.md
  • docs/changelog/2026-06-08-credentials-merge-servers-page.md

生产已热更(部分): 2026-06-08 docker cp — 执行记录 + 批量任务;凭据合并待下次前端部署。

审计范围

本批次(批量 · 执行记录 · 凭据)

模块 文件
批量后台 server_batch_service.pyserver_batch_common.pyserver_batch_store.py
批量 API server/api/servers.pyBatchJobStartedGET /batch/jobs
结果持久化 ServerBatchJob 模型、server_batch_job_repo.py
统一看板 API execution_record_service.pyexecution_records.pymain.py
Agent 安装 web/agent/install.shensure_agent_api_key()
前端队列 useScriptExecutionQueue.tsuseServerBatchJobViewer.tsApp.vue
执行记录页 ScriptRunsPage.vueexecutionRecordRoute.ts
审计入口 AuditPage.vueauditBatchDetail.tsauditLabels.ts
凭据合并 CredentialsManager.vueCredentialsDialog.vueServersPage.vue
单测 test_ensure_agent_api_key.pytest_server_batch_job_persist.pytest_batch_server_display_name.py

已提交 b8425cc(实时排序,交叉引用)

模块 文件
排序服务 server_list_sort.py
仓储 server_repo.py
前端分页 useServerPagination.ts
看板 DashboardPage.vue
单测 test_server_list_sort.py
构建入口 web/app/index.html

排序专项 Step3/Closure 见 docs/audit/2026-06-08-servers-live-sort-fix.md

安全

结论
批量端点鉴权 PASS 全部 Depends(get_current_admin)
SSH 批量命令 PASS 经 sudo_wrap + 既有 exec_ssh_command
Agent Key 自动生成 PASS 服务端 secrets.token_urlsafe,不入响应体
执行记录 API PASS /api/execution-records 需 JWT
凭据 CRUD PASS 复用原 /presets//ssh-key-presets//scripts/credentials
审计 detail JSON PASS 仅含 job_id/摘要/失败原因,无密钥
CUD 审计 PASS batch_install_agent 等 + target_type=server_batch_job

Step 3 规则扫描

H 规则 结论
H1 批量 SSH 不得阻塞 HTTP PASS 立即返回 job_id,后台 asyncio.create_task
H2 无静默吞错 PASS 单台失败写入 results[].error;审计/落库失败 logger.warning
H3 Redis 过期可回看 PASS MySQL server_batch_jobs + 审计「查看结果」
H4 脚本/批量 ID 冲突 PASS 详情须带 ?kind=script|server_batch
H5 安装 Agent 无 Key 不阻断 PASS ensure_agent_api_key() 自动写入
H6 install.sh 不破坏系统 Python PASS 并行装 python3.12,不改 alternatives
H7 凭据合并不丢功能 PASS 三 Tab CRUD 原样迁入对话框
H8 WS 进度复用 PASS task_kind: server_batch 与脚本队列共用

Closure

H 判定 依据
H1 PASS _start_server_batchstart_batch_job
H2 PASS _run_background except 标记 failed + warning 日志
H3 PASS _persist_job_finalize + AuditPage 查看结果
H4 PASS GET /execution-records/{id}?kind=
H5 PASS server_batch_common.ensure_agent_api_key
H6 PASS install.sh _install_system_python312
H7 PASS CredentialsManager.vue 全量迁移
H8 PASS broadcast_script_progress + registerServerBatchJob

Step 8 DoD

  • bash scripts/local_verify.sh — 26/26
  • pytest tests/test_ensure_agent_api_key.py tests/test_server_batch_job_persist.py — 4/4
  • cd frontend && npm run build — 通过
  • changelog 6 篇(本批次主题)
  • 生产热更验证报告 docs/reports/2026-06-08-unified-execution-records-deploy-verification.md
  • 凭据对话框生产终验(待前端部署)
  • 用户浏览器终验(执行记录 + 批量 Agent 三操作)

测试证据

bash scripts/local_verify.sh          # 26/26
pytest tests/test_ensure_agent_api_key.py tests/test_server_batch_job_persist.py -q  # 4 passed
cd frontend && npm run build          # OK
curl https://api.synaglobal.vip/health  # ok
curl https://api.synaglobal.vip/api/execution-records  # 401

残留风险(可接受)

风险 说明
热更新非镜像 下次 nx update 未 push 代码会被覆盖
合并列表分页 脚本+批量 total 为两表之和,大 offset 可能略偏
历史任务 Redis-only 旧任务无法补录 MySQL
工作区其它 diff 登录门控/页面缓存等 changelog 已有,未纳入本审计部署包,勿混部

Gate 7 变更文件对照

本审计覆盖上述「审计范围」表内全部路径;工作区另有 LoginPage*useCachedQuery* 等变更属并行会话,部署时须拆分或一并补审计。