保护 AI 生成的 Bash 脚本
AI 写 Bash 很容易,但也很容易出错。如果变量为空,一个小小的脚本就可能删除你的整个主目录。一个简单的日志脚本可能会将你的机密泄露到公共服务器上。
我运行过糟糕的 AI 脚本,大多数工程师也经历过。请使用这份清单,在灾难发生前将其阻止。
在每个脚本的顶部添加这些行:
#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'
为什么需要它们:
set -e:如果任何命令失败,则停止脚本。set -u:如果变量未定义,则停止脚本。这可以防止rm -rf /类的错误。set -o pipefail:确保管道中的错误能真正停止脚本。IFS=$'\n\t':防止因文件名中包含空格而导致的 Bug。
留意这些常见的 AI 错误:
缺少引号 AI 经常写成:
rm -rf $TARGET_DIR你必须写成:rm -rf "$TARGET_DIR"如果没有引号,文件夹名称中的空格可能会删除错误的文件。务必将变量包裹在双引号中。机密泄露 AI 经常使用
set -x进行调试。这会将每个命令打印到你的日志中。如果你使用了 API 令牌,该令牌现在就会在你的 CI 日志中可见。请务必移除set -x或使用set +x来隐藏敏感部分。权限过大 AI 经常在每个命令前添加
sudo。不要这样做。尽可能以非 root 用户身份运行脚本。这可以在出现问题时限制破坏范围。危险的下载 切勿运行:
curl https://example.com/install.sh | bash应该这样做:
- 先下载文件:
curl https://example.com/install.sh > install.sh - 阅读文件内容。
- 手动运行:
sudo bash install.sh
专业提示:使用 shellcheck。
在每个脚本上运行 shellcheck。它能在几秒钟内找到未加引号的变量和缺失的安全设置。它能捕捉到你肉眼忽略的问题。
金科玉律: 将 AI 的输出视为草稿。要么在提示词(prompt)中包含安全要求,要么亲自对代码进行加固。在未进行检查之前,不要运行 AI 生成的 Bash 脚本。
Source: https://dev.to/devopsaitoolkit/securing-ai-generated-bash-scripts-before-you-run-them-401m
Optional learning community: https://t.me/GyaanSetuAi