先备份、再校验、后生效,一次确认覆盖全部主机
—— 系列第 4 篇 ——
2026 年 10 月
目 录
一、现场:一次正经的批量变更
二、先看后改:AI 的变更三步曲
三、一次确认,两台生效
四、补一段:SFTP 文件分发
五、收尾:变更的顺序感
一、现场:一次正经的批量变更
上一篇巡检全是只读操作,AI 跑得很顺畅。这一篇升级难度:一次真正的变更——安全合规扫描给出整改项,要求所有对外站点补上两个安全响应头:X-Frame-Options 和 X-Content-Type-Options。涉及 web01、web02 两台 Nginx。
这个活儿不大,但流程一样不少:确认两台机器现有配置长什么样、在哪改合适、改完怎么验证语法、怎么让配置生效而不中断服务、万一改坏了怎么退回来。手工做,就是登一台改一台,scp、vim、nginx -t、reload,每个动作重复两遍,中间任何一步手滑都可能让网站挂掉——毕竟改的是正在服务的 Nginx 主配置。
批量变更和批量巡检的本质区别在于「写」。写操作出错的代价不对称:巡检看错了顶多重看,变更改错了就是事故。所以这一篇真正要看的,是 AI 在批量写场景下的工作顺序。
二、先看后改:AI 的变更三步曲
对话从需求描述开始:
我:合规扫描要求所有对外站点补安全响应头,给 web01、web02 的
Nginx 加上 X-Frame-Options 和 X-Content-Type-Options,
别影响现有配置
AI 没有立刻动手改,它先做了只读的「查现状」:
AI:→ run_command_on_hosts(
hosts=["web01","web02"],
command="grep -n include /etc/nginx/nginx.conf | head -5; \
ls /etc/nginx/conf.d/")
web01:conf.d/ 下有 default.conf,主配置 include 了 conf.d/*.conf
web02:与 web01 结构一致
现状确认:两台的 Nginx 结构一致,主配置都 include 了 conf.d 目录。这意味着最干净的改法不是动主配置,而是新增一个独立文件。AI 给出的方案值得逐行看——它把变更顺序也拟好了:
AI:方案:不改主配置,在两台机器的 /etc/nginx/conf.d/ 下新增
security.conf,内容两行响应头(主配置的 include 会自动加载):
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
执行顺序(每台相同):
1. 备份主配置与 conf.d 目录(带日期后缀)
2. 写入 security.conf
3. nginx -t 校验语法
4. 校验通过才 systemctl reload nginx(平滑重载,不断连接)
两台执行同一条命令链,将弹一次确认覆盖两台。是否开始?
备份 → 写入 → 校验 → 平滑生效,这个顺序不是我教的,是 AI 自己拟的。变更操作最怕的「改完才发现语法错了、服务起不来了」,被 nginx -t 这道闸拦在校验阶段;就算真出问题,带日期的备份随时可退。
三、一次确认,两台生效
我回复「开始」,Web 界面弹出确认框:完整命令链、目标主机列表(web01、web02)一目了然。确认一次,两台同时执行:
AI:→ run_command_on_hosts(
hosts=["web01","web02"],
command="cp -a /etc/nginx/nginx.conf{,.bak-20260927} && \
cp -a /etc/nginx/conf.d{,.bak-20260927} && \
(写入 security.conf 两行响应头) && \
> /etc/nginx/conf.d/security.conf && \
nginx -t && systemctl reload nginx") # 已确认
web01:nginx: configuration file test is successful
web02:nginx: configuration file test is successful
两台全部通过校验并平滑重载。AI 紧接着做生效验证——响应头是否真的出现在 HTTP 回复里:
AI:→ run_command_on_hosts(
hosts=["web01","web02"],
command="curl -sI http://127.0.0.1 | grep -iE 'x-frame|x-content'")
web01:X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
web02:X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
AI:两台已生效。备份保留在 nginx.conf.bak-20260927 与
conf.d.bak-20260927,如需回滚说一声即可。
从提需求到验证完毕,我做了三件事:描述需求、看一眼方案、点一次确认。变更不是「胆大者游戏」,而是顺序正确的流水线。
四、补一段:SFTP 文件分发
改完配置,运营又提了个小需求:新版 logo 要换到两台站点上。这类「把我电脑上的文件放到服务器上」的活,就是 SFTP 上传的舞台:
我:把 D:\tmp\logo-v2.png 传到两台的 /usr/share/nginx/img/logo.png
AI:→ upload_file(web01, D:\tmp\logo-v2.png → /usr/share/nginx/img/logo.png)
(上传目标在系统目录 /usr 下,确认后执行)
web01 上传完成,1.2MB
→ switch_host(web02) → upload_file(同上)
web02 上传完成
几个上传行为值得知道:文件从运行助手的本机发出(SFTP 走已建立的 SSH 通道,不需要在服务器上开新端口);远程父目录必须已存在,AI 需要时会先创建;上传到 /etc、/usr 这类系统目录,或单文件超过 50MB 时会弹确认。反向的下载(download_file)同理,把服务器文件拉回本机。
上传类操作的分级规则与命令一致:传到普通目录直接走,触碰系统目录就停下来问你。多台分发时 AI 会自动切换主机逐台上传——对两三台足够顺手;如果是上百台的大规模分发,它也会如实告诉你这条路更适合走部署系统,而不是硬撑。
环节 | 传统做法 | AI 运维助手 |
摸清现状 | 凭记忆或逐台查看 | 批量只读命令确认两台结构一致 |
方案设计 | 人脑拟改动点与顺序 | AI 拟方案并附完整执行顺序 |
执行保护 | 靠自觉先备份 | 备份、校验、生效在命令链里固化 |
确认成本 | 每台每步都在裸奔 | 高危一次确认覆盖全部目标主机 |
生效验证 | 刷网页碰运气 | curl 回验响应头并汇报 |
回滚准备 | 出事再翻备份 | 备份路径随报告给出,一句话可回滚 |
五、收尾:变更的顺序感
这一篇的核心不是「AI 会敲 cp 和 nginx -t」——这些命令任何运维都会。核心是它天然带着顺序感:先查现状再动手、先备份再写入、先校验再生效、先执行再验证。这套顺序在手动操作时代靠个人习惯和自律,习惯不好的人(以及赶时间的人)就会跳步;在 AI 这里它是拟命令时的默认动作,不赶时间、不嫌麻烦、不会忘。
批量变更的信任不是来自「AI 不会错」,而是来自三样东西:每一步可见(对话里完整展示命令链)、高危必确认(一次看清要动哪几台、动什么)、出错可回退(备份路径随手可得)。做到这三点,批量操作的效率提升才敢用。
配置文件级变更之外,还有一类变更更重——动整台机器:升级内核、大版本更新、调底层参数。那类操作的安全网不在文件备份,而在快照。下一篇就讲:变更前打个快照,出事怎么一键回滚。