保护 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 错误:

  1. 缺少引号 AI 经常写成:rm -rf $TARGET_DIR 你必须写成:rm -rf "$TARGET_DIR" 如果没有引号,文件夹名称中的空格可能会删除错误的文件。务必将变量包裹在双引号中。

  2. 机密泄露 AI 经常使用 set -x 进行调试。这会将每个命令打印到你的日志中。如果你使用了 API 令牌,该令牌现在就会在你的 CI 日志中可见。请务必移除 set -x 或使用 set +x 来隐藏敏感部分。

  3. 权限过大 AI 经常在每个命令前添加 sudo。不要这样做。尽可能以非 root 用户身份运行脚本。这可以在出现问题时限制破坏范围。

  4. 危险的下载 切勿运行: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