🎯 一句话总结:Oracle Cloud提供永久免费ARM云服务器(4核24GB+200GB+10TB/月),注册需信用卡验证,手动创建99%提示容量不足,需通过API脚本24小时自动抢。

📌 永久免费额度
Oracle的Always Free是资源永不到期,只要账号活跃就不回收。新注册还附赠 $300 试用额度(30天有效),可测试所有OCI服务。

ARM实例(Ampere A1.Flex)
| 资源项 | 免费额度 |
|---|---|
| OCPU | 4核(ARM64/aarch64) |
| 内存 | 24GB |
| 存储 | 200GB引导卷(与AMD共享) |
| 流量 | 每月10TB出口 |
| 实例数 | 最多4台,自由分配OCPU/内存 |
4核24G可拆分为1台4C24G / 2台2C12G / 4台1C6G等任意组合。
AMD实例(VM.Standard.E2.1.Micro)
| 资源项 | 免费额度 |
|---|---|
| 规格 | 1/8 OCPU + 1GB内存 |
| 数量 | 最多2台 |
最优组合:1台ARM 4C24G + 2台AMD 1/8C1G = 3台永久免费服务器
📝 注册账号
注册地址:oracle.com/cn/cloud/free/
以下环节直接影响注册成功率。
Home Region主区域
选定后不可更改。 决定后续所有资源的物理位置。

| 区域 | 示例 | 创建难度 | 延迟 |
|---|---|---|---|
| 亚太热门 | 东京、首尔、新加坡 | ⭐⭐⭐⭐ | 低 |
| 亚太冷门 | 孟买、悉尼 | ⭐⭐ | 中 |
| 北美 | 凤凰城、圣何塞 | ⭐ | 中 |
| 欧洲 | 伦敦、法兰克福 | ⭐⭐ | 高 |
2026年5月实测:新加坡ARM资源几乎时刻满载。不在意延迟的话,凤凰城或伦敦是最好的选择。
地址填写
必须用英文,且地址、IP、信用卡账单地址三者一致。

- 地址行用英文:
No.123 Tianhe Road, Tianhe District - 城市用拼音:
Guangzhou - 三者差异过大 → 报ABC错误(Abnormal Billing Cycle)
信用卡验证

绑卡时会收到扣款通知和失败通知(不会真正扣费)。2026年4月实测招商银行Visa / 建设银行Visa均可通过。
⚠️ 虚拟卡 / 预付卡基本都过不了认证,建议使用实体信用卡或双币借记卡。
⚙️ API密钥配置
注册完成、不要指望手动创建能成功——99%会报Out of host capacity。需要通过OCI API定时发送创建请求。
1. 生成API Key
登录控制台 → 右上角点头像 → My Profile → 左侧 API Keys → Add API Key:
- 选择 Generate API Key Pair(一键生成)
- 下载
.pem私钥文件 - 复制页面显示的config预览(user、fingerprint、tenancy、region)
⚠️ API Key和SSH Key是两样东西:SSH Key用来登录服务器,API Key用来调创建接口。
2. 配置文件
pip3 install oci
mkdir -p ~/oracle-arm
chmod 700 ~/oracle-arm
mv /path/to/oci_api_key.pem ~/oracle-arm/oci_api_key.pem
chmod 600 ~/oracle-arm/oci_api_key.pem
创建~/oracle-arm/config(替换为你的OCID和fingerprint):
[DEFAULT]
user=ocid1.user.oc1...(你的user OCID)
fingerprint=XX:XX:XX:XX:XX:XX...(页面显示的fingerprint)
tenancy=ocid1.tenancy.oc1...(你的tenancy OCID)
region=ap-singapore-1(你的Home Region)
key_file=/root/oracle-arm/oci_api_key.pem
3. 获取必要OCID
| 参数 | 获取方式 |
|---|---|
| Compartment ID | Identity & Security → Compartments → 复制root compartment OCID |
| Subnet ID | Networking → VCN → 点进Public Subnet → 复制OCID |
| Image ID | 用脚本查询(见下方) |
| AD | Compute → Create Instance → Placement栏显示 |
没有VCN的话:左上角Start VCN Wizard → Create VCN with Internet Connectivity → 默认配置创建。
4. 查询Ubuntu ARM镜像ID
必须用Ubuntu 22.04 aarch64,24.04有ARM兼容性问题:
import oci
config = oci.config.from_file("~/oracle-arm/config")
compute = oci.core.ComputeClient(config)
images = compute.list_images(
compartment_id=config["tenancy"],
operating_system="Canonical Ubuntu",
operating_system_version="22.04",
shape="VM.Standard.A1.Flex",
sort_by="TIMECREATED",
limit=3
).data
for img in images:
print(f"{img.display_name} | {img.id}")
# 选最新的Canonical-Ubuntu-22.04-aarch64-...镜像ID
🤖 自动抢购脚本
完整脚本
创建~/oracle-arm/grab.py:
#!/usr/bin/env python3
import oci, time, random, sys, signal
from datetime import datetime
CONFIG = "/root/oracle-arm/config"
COMPARTMENT = "你的compartment OCID"
SUBNET = "你的subnet OCID"
IMAGE = "你的Ubuntu 22.04 aarch64镜像OCID"
ADS = ["xxxx:REGION-AD-1"] # 新加坡只有一个AD,其他区域可能有多个
NAME, OCPUS, MEM, VOL = "arm-free-1", 4, 24, 50
SSH_KEY = "ssh-rsa AAAA... 你的SSH公钥"
INTERVAL = (30, 60) # 秒,避免429限流
def log(msg):
print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] {msg}", flush=True)
def handler(sig, frame):
log("Signal received, exiting")
sys.exit(0)
signal.signal(signal.SIGTERM, handler)
def main():
cfg = oci.config.from_file(CONFIG)
client = oci.core.ComputeClient(cfg)
client.base_client.timeout = (10, 30)
n = 0
while True:
n += 1
ad = ADS[0]
log(f"Attempt {n} | AD: {ad}")
try:
resp = client.launch_instance(oci.core.models.LaunchInstanceDetails(
compartment_id=COMPARTMENT,
availability_domain=ad,
display_name=NAME,
shape="VM.Standard.A1.Flex",
shape_config=oci.core.models.LaunchInstanceShapeConfigDetails(
ocpus=OCPUS, memory_in_gbs=MEM),
source_details=oci.core.models.InstanceSourceViaImageDetails(
source_type="image", image_id=IMAGE,
boot_volume_size_in_gbs=VOL),
create_vnic_details=oci.core.models.CreateVnicDetails(
subnet_id=SUBNET, assign_public_ip=True),
metadata={"ssh_authorized_keys": SSH_KEY}))
log(f"SUCCESS! ID: {resp.data.id}")
sys.exit(0)
except oci.exceptions.ServiceError as e:
msg, code = str(e.message), str(e.code)
if "Out of host capacity" in msg:
log(f"Capacity full (status={e.status})")
elif e.status == 429:
log("Rate limited, wait 120s")
time.sleep(120); continue
elif "LimitExceeded" in code:
log(f"Limit reached! {code}"); sys.exit(1)
else:
log(f"Error: {e.status} {code} {msg[:100]}")
except Exception as e:
log(f"Unknown: {type(e).__name__} {str(e)[:100]}")
w = random.randint(*INTERVAL)
log(f"Wait {w}s"); time.sleep(w)
if __name__ == "__main__":
log("Starting Oracle ARM grab script")
main()
后台运行
cd ~/oracle-arm
nohup python3 -u grab.py > grab.log 2>&1 &
tail -f grab.log
日志示例:
[2026-05-13 09:46:56] Starting Oracle ARM grab script
[2026-05-13 09:46:56] Attempt 1 | AD: MlGb:AP-SINGAPORE-1-AD-1
[2026-05-13 09:46:57] Capacity full (status=500)
[2026-05-13 09:46:57] Wait 57s
⚠️ 必须用
nohup或tmux运行,SSH断开会杀死进程。服务器重启需手动重新nohup。
💣 实测避坑
新加坡区域的容量问题
实测数据:连续运行15分钟,每30~60秒一次请求,所有返回均为500 Out of host capacity。新加坡ARM资源极少,2026年竞争更加激烈。
不急就继续跑;想快速上线:注册时选冷门区域(凤凰城/蒙特利尔/伦敦),升级为Pay As You Go不会自动扣费但能提高优先级。
Fingerprint必须与PEM匹配
上传PEM后,config里的fingerprint必须与PEM计算结果一致:
from cryptography.hazmat.primitives.serialization import load_pem_private_key, Encoding, PublicFormat
import hashlib
with open("oci_api_key.pem", "rb") as f:
key = load_pem_private_key(f.read(), password=None)
pub = key.public_key().public_bytes(Encoding.DER, PublicFormat.SubjectPublicKeyInfo)
fp = ":".join(hashlib.md5(pub).hexdigest()[i:i+2] for i in range(0, 32, 2))
print(f"fingerprint: {fp}")
不一致 → 401 NotAuthenticated。
Ubuntu版本别选24.04
24.04 aarch64与ARM实例存在兼容性问题(网络驱动/内核模块不匹配)。用22.04。
免费额度别超
上限4 OCPU + 24 GB,超过报LimitExceeded。可建4台1C6G,但不能多台4C24G。
SSH连接
ssh -i oci_api_key.pem ubuntu@<公网IP>
默认只开22端口,其他端口需VCN → Security Lists → Add Ingress Rules。
❓ FAQ
Q: "Out of host capacity"什么意思? A: 该区域/可用域没有空闲ARM资源。用脚本持续重试,有人释放就能抢到。
Q: 429错误怎么办? A: 请求太频繁被限流。把间隔调大(脚本已自动处理120秒冷却)。
Q: 抢到后会被回收吗? A: Always Free资源原则上永久,但CPU连续7天<10%可能被回收。保持一定使用率。
Q: 跑了一周都没结果正常吗? A: 正常。热门区域经常数月无空闲资源。建议冷门区域注册,抢到后升级Pay As You Go提高优先级。
Q: 升级Pay As You Go会扣费吗? A: 不会。Always Free资源仍然免费,付费账号的优势是更高优先级。
参考:Oracle Cloud Free Tier · OCI文档 · 脚本源码
