# 脚本执行:移除 Agent 在线门禁,改判 SSH 凭据 **日期**: 2026-06-07 ## 变更摘要 `ScriptService._dispatch_to_servers` 不再要求 `is_online`(Agent 心跳),改为检查服务器是否存在且已配置 SSH 凭据后直连 SSH 执行。 ## 动机 用户执行脚本 #3 于 2 台服务器瞬间 `failed (2 台失败)`。根因:经「批量 IP / 凭据轮询」入库的机器通常 **无 Agent**,`is_online=false`,旧逻辑直接跳过并记 `exit_code=-1`,与「脚本走 SSH」设计矛盾。 ## 涉及文件 - `server/application/services/script_service.py` — `_server_ssh_configured`、dispatch / 拉日志 - `tests/test_script_dispatch.py` — 回归单测 ## 迁移 / 重启 - 需重启 API worker ## 验证方式 ```bash pytest tests/test_script_dispatch.py -q ``` 对无 Agent、有 SSH 凭据的服务器执行短脚本,应不再秒失败;执行详情 stderr 不再出现 `Server offline or not found`。