Oracle 圣何塞抢机(一):oci-arm-catcher——Shell 脚本轻量部署
这是 Oracle 圣何塞抢机系列的第一篇。
系列目录
- (一)oci-arm-catcher——Shell 脚本轻量部署(本文)
- (二)oci-arm-host-capacity——PHP 版,支持 Telegram 通知与 GitHub Actions
一、为什么手动抢不到
Oracle Always Free 给每个账号 4 OCPU + 24 GB RAM 的 ARM 实例(VM.Standard.A1.Flex),永久免费,不消耗试用额度。但圣何塞(US West - San Jose)是全球竞争最激烈的区域,容量释放窗口极短,手动刷新命中率几乎为零。
唯一可行的方法:用脚本 24 小时持续轮询 API,资源一出现立刻调用 LaunchInstance。
二、注册准备
- 注册地址:https://www.oracle.com/cloud/free/
- 主区域:必须选 US West (San Jose),注册后永久无法更改
- 信用卡:VISA 或 Mastercard 外币卡(银联不支持)
- 防风控:使用家庭宽带 + 浏览器无痕模式,个人信息(拼音姓名、地址、邮编)与信用卡账单完全一致
- 同一张卡验证失败 2 次后立即换卡,否则会被拉黑
三、Oracle 控制台配置
登录控制台:https://cloud.oracle.com/
3.1 生成 API 密钥
将下载的 .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 |
系列目录
- (一)oci-arm-catcher——Shell 脚本轻量部署(本文)
- (二)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