用 AI 写 Shell 脚本,执行后服务器直接崩溃
为什么 AI 写的 Shell 脚本容易让服务器崩溃
AI 生成的 Shell 脚本表面上逻辑完整,但经常忽略系统环境——最典型的就是死循环和资源耗尽。
比如一个 while true 不加 sleep 的脚本,几秒钟就能打满 CPU;
更危险的是 rm -rf / 或 fork bomb,直接导致服务器挂掉或数据丢失。
我最近就遇到一起:用 AI 写了个自动备份脚本,它自作主张加了个无限循环用来“等待网络就绪”,结果执行后 CPU 飙到 100%,SSH 卡死,只能强制重启。
准备条件:先搭好安全环境
在测试 AI 脚本前,务必做好以下准备:
- 一台独立测试机,或云服务器快照(方便回滚)。
- root 或 sudo 权限,但绝对不要在线上环境直接跑。
- 安装好
top、htop等进程监控工具。 - 准备好
timeout命令(大部分 Linux 自带)。
分步操作:安全执行 AI 脚本的完整流程
- 审查脚本内容:用
cat script.sh或less script.sh查看,特别留意while、for、rm、shutdown、reboot等命令,如果有:(){ :|:& };:这种 fork bomb 立即删除。 - 语法检查:执行
bash -n script.sh,确认没有语法错误。 - 设置超时执行:用
timeout 5 bash script.sh强制 5 秒后终止,即使有死循环也不会长跑。 - 资源监控:开两个终端,一个执行脚本,另一个用
top -p $(pgrep -f script.sh)观察 CPU 和内存。 - 如果已经崩溃:SSH 连不上?通过云控制台 VNC 或 IPMI 登录,执行
killall -9 script.sh或重启。更极端的情况是进入单用户模式杀掉进程。
高频问题与避坑指南
- Q:AI 脚本里出现了
sleep 0或while true没限制 A:先把while true改为while [ condition ]; do sleep 1; done,或用ulimit -t 30限制 CPU 时间。 - Q:脚本执行后服务器负载瞬间爆满,如何快速终止? A:立即在另一个终端执行
pkill -f script.sh,如果系统还能响应;若卡死,只能硬重启。 - 避坑核心:永远不要以 root 身份直接执行未经审查的 AI 脚本。 建议先用普通用户测试,并且配置
ulimit限制最大进程数和运行时间。 - 另一个常见坑:脚本里用了
export或修改了系统变量,很容易覆盖重要配置。执行前用grep -E "(export|PATH|LD_PRELOAD)" script.sh检查。
效果验证:确认你的防护是否有效
写一个简单的测试脚本来模拟风险:
#!/bin/bash
while true; do
echo "running"
# 故意省略 sleep
done
保存为 test_fork.sh,然后执行 timeout 2 bash test_fork.sh。
如果 2 秒后进程自动结束,说明超时保护生效。
再用 top 观察执行瞬间 CPU 是否飙升后回落。
如果每次测试都能稳定终止,那你的安全流程就合格了。
总结
AI 生成 Shell 脚本很高效,但必须自己加一道防线。用超时、限制资源、优先测试这三个步骤能避免服务器直接崩溃。
如果你之前遇到过类似问题,不妨按本文的方法重新跑一遍你的 AI 脚本,很多坑其实提前就能解决。