Mobile wallpaper
1104 字
6 分钟

Gemini自动创建APIKEY

2025-07-21
2025-08-09
浏览量 加载中...
相关信息

利用Google Cloud Shell自动创建Gemini APIKEY。手动是及其不健康的

2025-08-05 20:58:创建密钥脚本添加睡眠时间防止429错误

  1. 前往Google Cloud
  2. 点击右上角的shell图标,并打开editor CleanShot 2025-07-21 at 21.01.24@2x.png
  3. 创建a.sh文件,粘贴下面内容:
    #!/bin/bash
    # 设置要创建的项目数量为12
    PROJECT_COUNT=20
    # 获取当前账号的邮箱
    current_email=$(gcloud config get-value account)
    echo "当前账号的邮箱是: $current_email"
    # 项目前缀 - 确保以字母开头
    EMAIL_PREFIX=${current_email%%@*}
    # 替换prrfix里的`.`为`-`
    EMAIL_PREFIX=${EMAIL_PREFIX//\./-g}
    echo "生成的项目前缀为: $EMAIL_PREFIX"
    # 如果前缀以数字开头,添加字母p前缀
    if [[ $EMAIL_PREFIX =~ ^[0-9] ]]; then
    PROJECT_ID_PREFIX="p$EMAIL_PREFIX"
    else
    PROJECT_ID_PREFIX="$EMAIL_PREFIX"
    fi
    echo "生成的项目前缀为: $PROJECT_ID_PREFIX"
    # 存储项目ID的数组
    PROJECT_IDS=()
    # 检查已有项目
    EXISTING_PROJECTS=$(gcloud projects list --format="value(projectId)")
    # 如果存在项目,添加到数组中
    if [ ! -z "$EXISTING_PROJECTS" ]; then
    for PROJECT_ID in $EXISTING_PROJECTS; do
    PROJECT_IDS+=($PROJECT_ID)
    done
    echo "已将${#PROJECT_IDS[@]}个已有项目添加到数组中"
    else
    echo "未发现已有项目"
    fi
    # 创建指定数量的项目
    for i in $(seq 1 $PROJECT_COUNT); do
    PROJECT_ID="$PROJECT_ID_PREFIX-$i"
    echo "正在创建项目: $PROJECT_ID"
    # 创建新项目,不使用 --no-enable-billing 参数
    gcloud projects create $PROJECT_ID --name="API Project $i" &
    # 等待后台任务完成
    wait
    # 将项目ID添加到数组中
    PROJECT_IDS+=($PROJECT_ID)
    echo "项目 $PROJECT_ID 创建完成"
    sleep 2
    done
    # 输出API密钥列表
    API_KEYS=""
    # 循环处理每个项目ID
    for PROJECT_ID in "${PROJECT_IDS[@]}"; do
    echo "正在处理项目: $PROJECT_ID"
    # 启用 Generative Language API
    gcloud services enable generativelanguage.googleapis.com --project=$PROJECT_ID &
    # 生成新的API密钥
    KEY_NAME="gl-api-key-$(date +%Y%m%d-%H%M%S)"
    KEY_RESPONSE=$(gcloud beta services api-keys create \
    --display-name="Generative Language API Key" \
    --api-target=service=generativelanguage.googleapis.com \
    --project=$PROJECT_ID \
    --format="json" &)
    # 等待所有后台任务完成
    wait
    # 检查返回结果中是否包含keyString
    if echo "$KEY_RESPONSE" | grep -q "keyString"; then
    # 直接从返回结果中提取keyString
    API_KEY=$(echo "$KEY_RESPONSE" | grep -o '"keyString": "[^"]*' | cut -d'"' -f4)
    else
    # 如果返回结果中没有keyString,则使用原来的方式获取
    echo "返回结果中没有keyString,使用备用方式获取"
    # 获取新创建的API密钥
    KEY_NAME=$(gcloud beta services api-keys list \
    --project=$PROJECT_ID \
    --filter="displayName:Generative Language API Key" \
    --format="value(name)" \
    --limit=1 &)
    # 等待密钥列表返回
    wait
    # 获取API密钥字符串
    API_KEY=$(gcloud beta services api-keys get-key-string $KEY_NAME \
    --project=$PROJECT_ID \
    --format="get(keyString)" &)
    fi
    # 等待 API 密钥获取完成
    wait
    # 添加到API密钥列表
    API_KEYS="${API_KEYS}${API_KEY}\n"
    echo "已在项目 $PROJECT_ID 中创建API密钥"
    sleep 2
    done
    echo "密钥生成完成"
    # 获取当前用户邮箱并输出结果
    USER_EMAIL=$(gcloud config get-value account)
    KEY_COUNT=$(echo -e "$API_KEYS" | grep -c .)
    echo "API密钥列表(共${KEY_COUNT}个):"
    echo "$USER_EMAIL"
    echo -e "$API_KEYS"
    # 删除当前目录下的a.sh和b.sh文件
    rm -f a.sh b.sh
  4. 等待即可。最后会输出apikey在终端
  5. 删除所有项目,创建b.sh,粘贴以下内容
    #!/bin/bash
    # 获取当前账号的邮箱
    current_email=$(gcloud config get-value account)
    echo "当前账号的邮箱是: $current_email"
    # 获取当前账号下的所有项目
    echo "正在获取当前账号下的所有项目..."
    PROJECT_IDS_TO_DELETE=($(gcloud projects list --format="value(projectId)"))
    if [ ${#PROJECT_IDS_TO_DELETE[@]} -eq 0 ]; then
    echo "当前账号下没有发现任何项目"
    exit 0
    fi
    echo "发现 ${#PROJECT_IDS_TO_DELETE[@]} 个项目:"
    for PROJECT_ID in "${PROJECT_IDS_TO_DELETE[@]}"; do
    echo " - $PROJECT_ID"
    done
    # 直接开始删除,无需确认
    echo ""
    echo "开始删除项目..."
    # 删除计数器
    deleted_count=0
    failed_count=0
    failed_projects=()
    # 逐个删除项目
    for PROJECT_ID in "${PROJECT_IDS_TO_DELETE[@]}"; do
    echo "正在处理项目: $PROJECT_ID"
    # 检查项目是否存在
    if gcloud projects describe $PROJECT_ID &>/dev/null; then
    # 获取项目状态
    PROJECT_STATE=$(gcloud projects describe $PROJECT_ID --format="value(lifecycleState)" 2>/dev/null)
    echo "项目状态: $PROJECT_STATE"
    # 如果项目处于DELETE_REQUESTED状态,先恢复
    if [ "$PROJECT_STATE" = "DELETE_REQUESTED" ]; then
    echo "项目处于删除请求状态,正在恢复..."
    if gcloud projects undelete $PROJECT_ID --quiet; then
    echo "项目 $PROJECT_ID 恢复成功,等待3秒..."
    sleep 3
    else
    echo "项目 $PROJECT_ID 恢复失败"
    ((failed_count++))
    failed_projects+=($PROJECT_ID)
    continue
    fi
    fi
    # 删除项目
    echo "正在删除项目: $PROJECT_ID"
    if gcloud projects delete $PROJECT_ID --quiet; then
    echo "项目 $PROJECT_ID 删除成功"
    ((deleted_count++))
    else
    echo "项目 $PROJECT_ID 删除失败"
    ((failed_count++))
    failed_projects+=($PROJECT_ID)
    fi
    else
    echo "项目 $PROJECT_ID 不存在,跳过"
    fi
    done
    echo ""
    echo "删除操作完成!"
    echo "成功删除: $deleted_count 个项目"
    echo "删除失败: $failed_count 个项目"
    if [ $failed_count -gt 0 ]; then
    echo "删除失败的项目:"
    for PROJECT_ID in "${failed_projects[@]}"; do
    echo " - $PROJECT_ID"
    done
    fi
    echo ""
    echo "注意: 删除的项目会进入30天恢复期,期间不会产生费用"
    在此处键入或粘贴代码
最后更新于 2025-08-09,距今已过 99 天

部分内容可能已过时

评论区

目录