📝 文章摘要
文章介绍了一套基于 GitHub Actions 的 Oracle ARM 云端自动抢机方案,无需本地挂机。核心步骤包括新建私有仓库、配置 7 项 Secrets 凭证、部署 workflow 脚本,并通过手动或定时任务每 15 分钟尝试创建实例。脚本默认抢 Ubuntu 24.04、4C24G 配置,45 分钟自动退出,成功后可使用一键脚本搭建节点。

Oracle ARM, 抢机脚本, GitHub Actions, OCI配置, 自动部署, Ubuntu 24.04, API密钥, 子网ID, SSH公钥, 定时任务, 防封策略, 私有仓库

很多兄弟用纯国内环境成功下号后,卡在了“配置不足”这一步。今天就把坑填上,分享这套完全不需要本地挂机的 GitHub Actions 自动化抢机脚本。

一、纯云端抢机配置步骤

  1. 新建仓库: 在自己的 GitHub 账号下创建一个新的私有仓库 (Private Repository)。
  2. 配置安全环境变量 (Secrets): 进入仓库的 Settings → Secrets and variables → Actions,点击 New repository secret,严格按照代码里的变量名,逐一添加以下 7 个凭证:
    • TENANCY_OCID (Oracle 租户 ID)
    • USER_OCID (Oracle 用户 ID)
    • REGION (服务器所在区域,例如 us-phoenix-1)
    • FINGERPRINT (Oracle API 密钥指纹)
    • PRIVATE_KEY (Oracle API 私钥的完整文本)
    • SUBNET_ID (目标虚拟云网络中的子网 ID)
    • USER_SSH_PUB_KEY (自己电脑的SSH公钥,必须配置正确,否则抢到机器也无法通过 SSH 登录)
  3. 部署代码: 在仓库根目录下创建 .github/workflows/ 文件夹,新建一个 .yml 文件(例如 sniper.yml),将下边的代码完整粘贴进去并提交。
  4. 触发运行: 代码中配置了 workflow_dispatch,可以直接到 GitHub 的 Actions 面板中,手动点击 Run workflow 来启动脚本;同时代码也配置了 cron,会自动每 15 分钟在后台尝试一次,45分钟超时自动安全退出,极致防封。

注:脚本默认抢的是 Ubuntu 24.04。如果想安装其他系统,修改代码第 40 行的查询条件即可。

二、完整 GitHub Actions 源码

点击展开查看 sniper.yml 源码:

PHP
name: Oracle ARM Instance Sniper Template
on:
  workflow_dispatch:
  schedule:
    - cron: '*/15 * * * *'

jobs:
  sniper:
    name: ARM Instance Sniper
    runs-on: ubuntu-latest
    timeout-minutes: 60
    concurrency:
      group: ${{ github.workflow }}
      cancel-in-progress: false

    env:
      OCI_TENANCY: ${{ secrets.TENANCY_OCID }}
      OCI_REGION: ${{ secrets.REGION }}
      SUBNET_ID: ${{ secrets.SUBNET_ID }}
      SSH_PUB_KEY: ${{ secrets.USER_SSH_PUB_KEY }}

    steps:
      - name: Install OCI CLI
        run: |
          curl -L -O [https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh](https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)
          chmod +x install.sh
          ./install.sh --accept-all-defaults
          echo "/home/runner/bin" >> $GITHUB_PATH

      - name: Setup OCI Config
        env:
          OCI_USER: ${{ secrets.USER_OCID }}
          OCI_FP: ${{ secrets.FINGERPRINT }}
          OCI_PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }}
        run: |
          mkdir -p ~/.oci
          cat > ~/.oci/config < ~/.oci/key.pem
          chmod 600 ~/.oci/key.pem ~/.oci/config

      - name: Fixed-Key Sentry Loop
        run: |
          export OCI_CLI_SUPPRESS_FILE_PERMISSIONS_WARNING=True
          START_TIME=$(date +%s)
          
          mkdir -p ~/.ssh
          echo "${SSH_PUB_KEY}" > ~/.ssh/id_rsa_oracle.pub
          
          AD_LIST=$(oci iam availability-domain list --compartment-id "${OCI_TENANCY}" --query "data[*].name" --raw-output | jq -r '.[]' | sort)
          IMAGE_ID=$(oci compute image list --compartment-id "${OCI_TENANCY}" --operating-system "Canonical Ubuntu" --operating-system-version "24.04" --shape "VM.Standard.A1.Flex" --query 'data[0].id' --raw-output)
          
          echo "=== Oracle ARM Sniper Template V1.0 ==="
          echo "[AD] Target ADs: $(echo $AD_LIST | tr '\n' ' ')"
          echo "[IMG] Target Image: ${IMAGE_ID}"
          
          while true; do
            CURRENT_TIME=$(date +%s)
            ELAPSED=$(( CURRENT_TIME - START_TIME ))
            
            if [ $ELAPSED -gt 2700 ]; then
              echo "[TIMEOUT] Reached 45m limit. Exiting safely."
              exit 0
            fi

            for ad in $AD_LIST; do
              echo "[TRY] $ad | Elapsed: ${ELAPSED}s"
              
              if oci compute instance launch \
                --availability-domain "$ad" \
                --compartment-id "${OCI_TENANCY}" \
                --shape "VM.Standard.A1.Flex" \
                --shape-config '{"ocpus":4,"memoryInGBs":24}' \
                --image-id "$IMAGE_ID" \
                --subnet-id "${SUBNET_ID}" \
                --ssh-authorized-keys-file ~/.ssh/id_rsa_oracle.pub \
                --assign-public-ip true \
                --display-name "SNIPER-$(date +%m%d_%H%M)" \
                --wait-for-state RUNNING --max-wait-seconds 1 \
                >/dev/null 2>/dev/null; then
                
                echo "[SUCCESS] ARM 4C24G instance created in $ad"
                exit 0
              else
                echo "$ad: No stock"
              fi
              
              sleep 5
            done
            sleep 30
          done

五、机器到手,一步到位搭建节点
抢到机器后如何起飞?附送一个非常稳的“甬哥VPS专用一键脚本”,直接跑就行:
bash <(wget -qO- [https://raw.githubusercontent.com/yonggekkk/sing-box-yg/main/sb.sh](https://raw.githubusercontent.com/yonggekkk/sing-box-yg/main/sb.sh))
祝大家早日用上免费的 2核 12G 神机!
截至至今日,4核 24G 神机未收费!
![3|690x202](upload://eUuDN36MYhZl37U7Ah47XCtEXnS.png)
本文最后更新于2026年7月10日,若涉及的内容可能已经失效,直接留言反馈补链即可,我们会处理,谢谢
声明:本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,请勿用于任何商业目的与商业用途,如需商用请支持正版!如亲下载后改变其用途与使用方式,与本站无任何关系,本站已经进行告知义务!我们只做安全认证测试如果资源侵犯了您的版权利益,请联系站长邮箱:17606723350@163.com