Oracle 圣何塞抢机(一):oci-arm-catcher——Shell 脚本轻量部署

这是 Oracle 圣何塞抢机系列的第一篇。

系列目录

  1. (一)oci-arm-catcher——Shell 脚本轻量部署(本文)
  2. (二)oci-arm-host-capacity——PHP 版,支持 Telegram 通知与 GitHub Actions

# Oracle 圣何塞 ARM 抢机(一) ## 为什么要抢 - Always Free 4核24GB ARM 永久免费 - 圣何塞需求极大,手动成功率≈0 - 必须脚本 24 小时轮询 ## 注册准备 - 主区域选 US West (San Jose),不可更改 - VISA/Mastercard 外币卡 - 个人信息与账单完全一致 - 家庭宽带 + 无痕模式,避免机房 IP ## OCI 账号配置 - 生成 API 密钥(下载 .pem) - 收集 User OCID / Tenancy OCID / Fingerprint - 创建 VCN 公共子网 - 获取 ARM 镜像 OCID ## oci-arm-catcher 脚本 - 依赖:OCI CLI + Python 3(系统自带) - .env 配置:OCID、规格、轮询间隔 - 先抢 1核6GB,成功率高 3 倍 - 支持多 AD 轮换 ## 运行与持久化 - nohup 后台运行 - Systemd 服务(重启自动恢复) - tail -f 实时日志 ## 抢到后必做 - 安全列表开放 22 端口 - 保活 cron 防 30 天回收 - 停止抢机脚本 - 可选:调整到 4核24GB

一、为什么手动抢不到

Oracle Always Free 给每个账号 4 OCPU + 24 GB RAM 的 ARM 实例(VM.Standard.A1.Flex),永久免费,不消耗试用额度。但圣何塞(US West - San Jose)是全球竞争最激烈的区域,容量释放窗口极短,手动刷新命中率几乎为零。

唯一可行的方法:用脚本 24 小时持续轮询 API,资源一出现立刻调用 LaunchInstance。

flowchart LR S([脚本启动]) --> L[调用 OCI LaunchInstance API] L --> C{结果} C -->|Out of host capacity| W[等待 2-3 秒] W --> L C -->|其他错误| E[打印错误,停止] C -->|成功| N[通知 + 退出]

二、注册准备

  • 注册地址https://www.oracle.com/cloud/free/
  • 主区域:必须选 US West (San Jose),注册后永久无法更改
  • 信用卡:VISA 或 Mastercard 外币卡(银联不支持)
  • 防风控:使用家庭宽带 + 浏览器无痕模式,个人信息(拼音姓名、地址、邮编)与信用卡账单完全一致
  • 同一张卡验证失败 2 次后立即换卡,否则会被拉黑

三、Oracle 控制台配置

登录控制台:https://cloud.oracle.com/

3.1 生成 API 密钥

flowchart LR A[右上角头像] --> B[用户设置] B --> C[API 密钥] C --> D[添加 API 密钥] D --> E[生成密钥对] E --> F[下载私钥 .pem] F --> G[复制配置信息]

将下载的 .pem 文件上传到服务器:

mkdir -p ~/.oci
mv ~/oracle_key.pem ~/.oci/
chmod 600 ~/.oci/oracle_key.pem

需要记录的信息(添加密钥后弹出框中全部可见):

参数 说明
User OCID ocid1.user.oc1..aaaaaa...
Tenancy OCID ocid1.tenancy.oc1..aaaaaa...
Key Fingerprint xx:xx:xx:...:xx
Region 固定填 us-sanjose-1

3.2 创建 VCN(虚拟云网络)

控制台 → 网络 → 虚拟云网络 → 通过向导创建 → 选择"具有互联网连接的 VCN"。

创建完成后,进入子网列表,复制公共子网的 OCID

3.3 获取 ARM 镜像 OCID

控制台 → 计算 → 镜像 → 平台镜像 → 筛选架构 ARM → 选 Ubuntu 22.04 最新版 → 复制 OCID。

3.4 设置预算警报(必做)

控制台 → 账单与成本管理 → 预算 → 新建:

  • 金额:5 美元
  • 触发条件:实际支出达到 100%
  • 开启邮件通知

四、安装 OCI CLI

bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"

# 初始化配置(交互式)
oci setup config
# region 填: us-sanjose-1

生成 SSH 密钥(如尚无):

ssh-keygen -t ed25519 -C "oracle-arm" -f ~/.ssh/id_ed25519

五、部署 oci-arm-catcher

脚本已克隆至 /home/sdmike/oracle-arm-grabber/oci-arm-catcher/

5.1 用辅助脚本查询 OCID

cd /home/sdmike/oracle-arm-grabber/oci-arm-catcher
./scripts/get-config.sh

输出会直接打印出 COMPARTMENT_ID、可用域名称、子网 OCID、镜像 OCID,复制粘贴到 .env 即可。

5.2 配置 .env

nano /home/sdmike/oracle-arm-grabber/oci-arm-catcher/.env

圣何塞配置示例:

COMPARTMENT_ID="ocid1.tenancy.oc1..你的租户OCID"
DISPLAY_NAME="sanjose-arm-free"
SSH_KEY_FILE="$HOME/.ssh/id_ed25519.pub"

# 圣何塞只有 1 个可用域
AVAILABILITY_DOMAIN="BUlS:US-SANJOSE-1-AD-1"

SUBNET_ID="ocid1.subnet.oc1.us-sanjose-1.你的子网OCID"
IMAGE_ID="ocid1.image.oc1.us-sanjose-1.你的镜像OCID"

# 先抢小规格,成功率高 3 倍,抢到后控制台可以扩容
OCPUS=1
MEMORY_GB=6

# 轮询间隔 2-3 秒,避免触发 Oracle 限流
RETRY_INTERVAL=3

5.3 启动脚本

chmod +x /home/sdmike/oracle-arm-grabber/oci-arm-catcher/oci-arm-catcher.sh

cd /home/sdmike/oracle-arm-grabber/oci-arm-catcher
nohup ./oci-arm-catcher.sh > catcher.log 2>&1 &
echo "PID: $!"

tail -f catcher.log

正常运行日志:

[2026-06-08 17:23:01] Attempt #1 — launching VM.Standard.A1.Flex (1 OCPU / 6 GB)
[2026-06-08 17:23:04] ✗ InternalError: Out of host capacity. Waiting 3s...
[2026-06-08 17:23:07] Attempt #2 — ...
...
[2026-06-08 19:47:33] ✓ SUCCESS! Instance launched: ocid1.instance.oc1.us-sanjose-1.xxx

六、持久化:Systemd 服务

机器重启后自动恢复运行:

sudo tee /etc/systemd/system/oci-arm-catcher.service > /dev/null <<EOF
[Unit]
Description=OCI ARM Catcher
After=network-online.target

[Service]
Type=simple
User=$(whoami)
WorkingDirectory=/home/sdmike/oracle-arm-grabber/oci-arm-catcher
ExecStart=/home/sdmike/oracle-arm-grabber/oci-arm-catcher/oci-arm-catcher.sh
Restart=on-failure
StandardOutput=append:/home/sdmike/oracle-arm-grabber/oci-arm-catcher/catcher.log
StandardError=append:/home/sdmike/oracle-arm-grabber/oci-arm-catcher/catcher.log

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now oci-arm-catcher

七、抢到后的操作

7.1 开放安全规则

OCI 默认屏蔽所有入站流量,需手动添加:

控制台 → 网络 → VCN → 安全列表 → 添加入站规则:

  • 来源 CIDR:0.0.0.0/0
  • 协议:TCP
  • 目标端口:22(SSH),可追加 80、443

7.2 SSH 登录

# Ubuntu 镜像默认用户名 ubuntu
ssh -i ~/.ssh/id_ed25519 ubuntu@<公网IP>

公网 IP 在控制台 → 计算 → 实例 → 实例详情页面查看。

7.3 保活 cron(防 30 天回收)

登录到 ARM 实例后执行:

(crontab -l 2>/dev/null; echo "*/20 * * * * uptime > /dev/null") | crontab -

7.4 停止抢机脚本

sudo systemctl stop oci-arm-catcher
# 或直接 kill <PID>

7.5 扩容到 4核24GB(可选)

控制台 → 计算 → 实例 → 实例详情 → 调整形状 → 修改 OCPU 为 4、内存为 24 GB。


八、常见问题

错误 原因 处理
Out of host capacity 无可用资源 正常,继续等待(通常 1-7 天)
auth error / 403 API 密钥配置有误 重新 oci setup config
LimitExceeded 配额已满 检查已有实例总量 ≤ 4核24GB
SSH connection refused 安全规则未开 22 端口 参考 7.1 节添加入站规则

最佳抢机时间:北京时间 下午 5-7 点(圣何塞当地凌晨 2-4 点),竞争压力降低约 60%。


相关链接

用途 地址
注册免费账号 https://www.oracle.com/cloud/free/
云控制台 https://cloud.oracle.com/
OCI CLI 安装文档 https://docs.oracle.com/iaas/Content/API/SDKDocs/cliinstall.htm
Always Free 资源说明 https://docs.oracle.com/iaas/Content/FreeTier/freetier_topic-Always_Free_Resources.htm
oci-arm-catcher 项目 https://github.com/alexpua/oci-arm-catcher

系列目录

  1. (一)oci-arm-catcher——Shell 脚本轻量部署(本文)
  2. (二)oci-arm-host-capacity——PHP 版,支持 Telegram 通知与 GitHub Actions

实操清单

注册与账号

  • 访问 https://www.oracle.com/cloud/free/ 注册,主区域选 US West (San Jose)
  • 控制台 → 用户设置 → API 密钥 → 生成并下载私钥 .pem
  • 将私钥上传服务器:mkdir -p ~/.oci && chmod 600 ~/.oci/*.pem
  • 记录 User OCID、Tenancy OCID、Key Fingerprint
  • 生成 SSH 密钥:ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519

控制台配置

  • 创建 VCN,记录公共子网 OCID
  • 获取 ARM Ubuntu 22.04 镜像 OCID
  • 设置 5 美元预算警报(防意外扣费,必做)

脚本部署

  • 安装 OCI CLI 并运行 oci setup config(region 填 us-sanjose-1
  • 运行 ./scripts/get-config.sh 自动查询 OCID
  • 填写 oci-arm-catcher/.env(替换所有 xxxx 占位符)
  • chmod +x oci-arm-catcher.sh
  • nohup ./oci-arm-catcher.sh > catcher.log 2>&1 &
  • tail -f catcher.log 确认正常输出

抢到实例后

  • 控制台安全列表开放 TCP 22 端口
  • ssh -i ~/.ssh/id_ed25519 ubuntu@<公网IP> 验证登录
  • ARM 实例上配置保活 cron
  • sudo systemctl stop oci-arm-catcher 停止抢机脚本
  • (可选)控制台调整规格至 4核24GB