ansible 的 script 模块默认支持“不落盘执行”,即临时上传、执行后自动清理;需避免非零退出码掩盖失败、脚本内复制自身、禁用 creates/removes 参数,适配高安检测流水并强化安全校验。

Ansible 的 script 模块天然支持“不落盘执行”——它会将本地脚本内容通过 SSH 传输到目标主机的临时路径(如 /tmp/ansible-tmp-xxx/),执行后自动清理,无需手动上传或残留脚本文件。这正适合高安检测这类对环境洁净度要求高、需批量触发且禁止长期驻留检测逻辑的场景。
确保 script 模块行为符合“不落盘”预期
script 模块默认即为“一次执行、临时落盘、立即清理”,但需注意以下几点避免意外残留:
- 脚本中不要使用
exit 1以外的非零退出码掩盖失败(Ansible 依赖退出码判断任务状态,异常退出可能中断清理流程) - 避免在脚本内用
mv/cp将自身复制到固定路径(如/usr/local/bin/),否则违背“不落盘”原则 - 禁用
creates或removes参数——它们会干扰临时文件生命周期判断
适配高安检测流水的典型结构
高安检测通常包含:资产识别 → 配置核查 → 进程/端口扫描 → 日志取证 → 生成报告。可将整条流水封装为一个本地 shell 脚本(如 highsec-check.sh),由 script 模块调用:
- 脚本开头加
#!/bin/bash -e,确保任意步骤失败即终止,防止跳过关键检查 - 所有输出重定向至
/dev/stderr或使用echo >&2,便于 Ansible 收集错误日志 - 最终用
jq或printf输出 JSON 格式结果(如{"status":"pass","findings":[]}),方便后续set_fact提取
批量执行与结果聚合建议
单次 script 调用仅返回 stdout/stderr 和退出码,如需汇总多台机器的检测结论,推荐组合以下方式:
- 在 playbook 中用
register: check_result捕获每台机的执行结果 - 用
loop+delegate_to: localhost在控制节点解析各主机的check_result.stdout(JSON 字符串)并写入文件 - 最后用
community.general.json_query或ansible.builtin.set_stats统计 “pass/fail/unknown” 总数
安全增强实践(非必需但推荐)
针对高安场景的敏感性,可进一步收紧执行边界:
- 在脚本开头加入
id -u | grep -q '^0$' || { echo 'ERROR: must run as root'; exit 1; },强制权限校验 - 用
ansible_ssh_extra_args="-o StrictHostKeyChecking=yes"防止中间人劫持 - 对脚本本身做 SHA256 校验(如
sha256sum highsec-check.sh | cut -d' ' -f1),在 playbook 中比对远端执行前的哈希值(需配合stat模块读取临时路径元信息)











