保存时间:2026/3/29 16:00:06
#!/bin/bash
TARGET="实现[你的功能,如:读取系统命令并存储到数据库]"
MAX_ITER=10 # 避免无限循环烧钱
for ((i=1; i<=$MAX_ITER; i++)); do
# 调用AI(如Claude/ChatGPT)基于历史报错生成代码
curl -s -X POST [AI接口地址] -d '{"prompt":"目标:'$TARGET'。历史报错:'$(cat error.log 2>/dev/null)'","model":"claude-3-opus"}' > script.sh
# 执行代码并捕获报错
bash script.sh 2> error.log || continue # 报错则继续循环
echo "执行成功!迭代次数:$i" && exit 0 # 成功则退出
done
echo "达到最大迭代次数,执行失败"
error.log)传递上下文。TARGET改为“扫描Ubuntu系统所有命令、获取帮助文档、提取硬件/软件信息,存入数据库”,AI会自动生成对应扫描+存储代码。MAX_ITER限制迭代次数,避免Token/算力浪费。#!/bin/bash
# 核心配置:目标功能+安全约束+API参数
TARGET="1. 用which *扫描Ubuntu所有系统命令并去重;2. 对每个命令用man命令+--help/-h参数提取帮助文档和参数;3. 解析参数含义(如是否修改系统);4. 仅保留只读类命令数据,存入SQLite数据库(路径:system_commands.db)"
SAFETY_RULES="绝对禁止执行任何可能修改系统的命令!包括但不限于:rm、mv、cp(覆盖模式)、chmod、chown、mkdir、rmdir、apt-get、apt、sudo、dd、fdisk、格式化类命令、写入文件的重定向(>、>>)、删除/修改配置文件的操作。仅允许执行man、--help/-h、which、find(只读)、file、stat(只读)等查询类命令"
AI_API="https://api.openai.com/v1/chat/completions" # 替换为实际API(如Anthropic/Claude)
API_KEY="sk-xxx" # 替换为你的API密钥
MAX_ITER=15
DB_PATH="system_commands.db"
# 初始化错误日志和数据库
> error.log
[ -f $DB_PATH ] || sqlite3 $DB_PATH "CREATE TABLE IF NOT EXISTS commands (name TEXT PRIMARY KEY, help TEXT, params TEXT, is_readonly BOOLEAN)"
# AI循环生成+测试+修正
for ((i=1; i<=$MAX_ITER; i++)); do
echo "=== 迭代次数:$i ==="
# 调用AI,明确安全约束和目标
curl -s -X POST $AI_API \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $API_KEY" \
-d '{
"model": "gpt-4o",
"messages": [
{"role": "system", "content": "'"$SAFETY_RULES"'. 你必须生成安全的Bash代码,所有命令仅执行查询操作,禁止任何写操作"},
{"role": "user", "content": "目标:'"$TARGET"'。历史报错:'"$(cat error.log 2>/dev/null)"'。请生成完整可运行的Bash代码,包含命令扫描、帮助提取、参数解析、数据库存储,确保无安全风险"}
],
"temperature": 0.3 # 降低随机性,优先安全和准确性
}' > ai_response.json
# 提取AI生成的代码(从JSON响应中过滤出代码块)
jq -r '.choices[0].message.content' ai_response.json | grep -A 1000 '```bash' | grep -B 1000 '```' | sed '/```/d' > scan_commands.sh
chmod +x scan_commands.sh
# 安全执行:用沙箱限制写权限(关键!)
echo "执行扫描脚本(只读模式)..."
docker run --rm -v $(pwd):/app -w /app --read-only ubuntu:latest bash -c "./scan_commands.sh 2>> error.log" || {
echo "迭代$i失败,继续修正..."
continue
}
# 验证结果:检查数据库是否有合法数据
if [ $(sqlite3 $DB_PATH "SELECT COUNT(*) FROM commands") -gt 0 ]; then
echo "✅ 执行成功!共扫描到$(sqlite3 $DB_PATH "SELECT COUNT(*) FROM commands")条只读命令,已存入$DB_PATH"
exit 0
else
echo "数据库无有效数据,重新迭代..."
echo "数据库无有效数据" >> error.log
fi
done
echo "❌ 达到最大迭代次数,执行失败(查看error.log获取详情)"
--read-only参数挂载目录,即使脚本存在漏洞,也无法修改宿主机系统(仅允许读取和在当前目录写数据库文件)。temperature=0.3让 AI 优先输出安全、规范的代码,减少冒险操作。which *+find /usr/bin /bin -type f双重扫描,确保不遗漏系统命令。man 命令、命令 --help、命令 -h三种方式,确保获取完整参数信息。ls、pwd、man为安全,rm、apt为危险并过滤)。sudo apt install docker.io jq sqlite3 curl(Docker 用于沙箱,jq 解析 AI JSON 响应)。AI_API和API_KEY改为你的实际接口(支持 ChatGPT、Claude 等,只需调整 JSON 请求格式)。sudo usermod -aG docker $USER,重启终端生效)。