从一无所有到拥有一台可以 SSH 登录的服务器,最短路径只有四步。每一步都无需与任何人交谈,也无需身份证件。
- 创建账户。邮箱和密码即可。邮箱仅用于数据泄露通知和金丝雀声明提醒——我们绝不会将其用于营销。
- 充值余额。我们不保存任何支付方式。你向一次性地址发送任意受支持的加密货币,待充值确认后,我们会以美元参考值将金额记入你的账户余额。
- 部署服务器。选择套餐、地区和操作系统镜像,粘贴 SSH 公钥。部署耗时 30–90 秒。
- 连接。通过 SSH 连接控制面板显示的 IPv4 地址,使用你上传的 SSH 密钥以
root 身份登录。
注册
邮箱加密码。密码使用 bcrypt 哈希(cost factor 为 12)。邮箱会被规范化为小写并哈希后用于查找,绝不会与明文存放在一起。除基本的语法检查外,我们不会验证邮箱是否“真实”——你可以使用任何你能控制的地址。
会话
登录会创建一个 30 天滚动有效的会话,该会话绑定到存放在 HttpOnly、Secure、SameSite=Lax Cookie 中的设备专属密钥。每个浏览器都是独立的会话;你可以在账户 → 安全中查看并撤销这些会话。
双因素认证
有两种方式:
- TOTP——RFC 6238,30 秒时间窗口,SHA-1(兼容所有身份验证器应用)。恢复码仅在设置时生成一次,且只显示这一次。
- WebAuthn(FIDO2)——硬件密钥、平台身份验证器(Touch ID、Windows Hello)。可注册多个密钥。
启用 2FA 后,登录、修改密码、创建 API 令牌和删除账户时都需要验证。而在已登录的会话中部署服务器时不需要——在这里拖慢你的操作并不合适。
删除账户
删除账户可在账户 → 安全 → 删除账户中自助完成。流程如下:
- 所有服务器都会被销毁(不可撤销,没有宽限期)。
- 剩余余额将作废(我们没有办法退还——加密货币退款需要一个经你验证的地址,而这本身就是一个 KYC 环节)。
- 账户记录会被替换为一块“墓碑”(ID 加删除时间戳)。邮箱哈希、密码哈希、会话、令牌、SSH 密钥:全部清除。
- 账单历史记录会保留 13 个月,用于欺诈对账,且不附带任何个人身份信息(PII)。
充值流程
在账户 → 账单 → 充值中:
- 选择币种和金额(以美元参考值计)。
- 我们会生成一个一次性收款地址,并将汇率锁定 30 分钟。
- 你发送资金,我们等待所需的确认数(见下表)。
- 确认后,你的账户余额按锁定汇率入账。超出部分按确认时的即期汇率入账。
支持的币种与确认数
| 币种 | 最低充值额 | 确认数 | 典型等待时间 |
| 比特币(BTC) | $10 | 2 | 约 20 分钟 |
| 门罗币(Monero,XMR) | $5 | 10 | 约 20 分钟 |
| 莱特币(LTC) | $5 | 6 | 约 15 分钟 |
| 以太坊(ETH) | $15 | 30 | 约 6 分钟 |
| 波场(TRX) | $5 | 20 | 约 1 分钟 |
| USDT · ERC-20 | $15 | 30 | 约 6 分钟 |
| USDT · TRC-20 | $10 | 20 | 约 1 分钟 |
| 索拉纳(Solana,SOL) | $5 | 32 | 约 1 分钟 |
| 比特币闪电网络(Lightning) | $1 | 不适用(链下) | 数秒 |
按周期预付模式
每台服务器都从账户余额中按周期预付,周期可选 1、3、6 或 12 个月,对应的折扣分别为 0%、25%、35% 和 50%。整个周期的费用在部署时一次性扣除,且不会自动续费。
- 余额充足时,该周期的费用会立即扣除,服务器随即部署。余额不足时,部署会被拒绝,也不会扣除任何费用。
- 如果在周期结束前你没有订购新周期,服务器就会到期:被标记为
suspended 并停止接收流量。
- 你有 7 天时间订购新周期。7 天后,服务器将被销毁,其 IP 被释放,磁盘被擦除。
账单历史
每一笔明细都在账户 → 账单 → 账单历史中:充值、各服务器的周期扣费,以及适用时的 SLA 补偿。每一行都有固定的 ID 可供引用,并可导出为 CSV。
部署
在任意套餐上点击配置,或通过 API 部署。新服务器会依次经历以下状态:
- provisioning——我们正在分配虚拟机。耗时 30–90 秒。
- installing——正在写入操作系统镜像并运行 cloud-init。耗时 30–120 秒。
- running——服务器已启动,可通过 SSH 访问。
- stopped——已正常关机。服务器停止期间,已预付的周期仍在计时,磁盘和 IP 仍保持分配。
- suspended——周期已结束,且未订购新周期。服务器已关闭,无法访问。销毁前有 7 天宽限期。
重启与重建
两个经常被混淆的操作:
- 重启会向客户机发送 ACPI 关机信号,等待 30 秒后再重新开机。磁盘内容会被保留。在 API 调用中添加
?hard=true(或在界面中开启“硬重启”开关)即可跳过 ACPI 步骤。
- 重建会从头重新安装操作系统镜像。磁盘上的所有数据都会被销毁。Cloud-init 会再次运行。想要全新开始又不想重新创建服务器时,就用它(IPv4 和 IPv6 保持不变)。
救援模式
救援模式会从一个基于 Alpine 的小型 ISO 引导服务器,并运行在 4 GB 的 tmpfs 中。你的磁盘处于未挂载状态,可通过 /dev/vda、/dev/vdb 等访问。可用它来:
- 恢复你把自己锁在外面的系统(忘记 root 密码、
sudo 损坏等)。
- 手动解锁经 LUKS 加密的根卷。
- 对损坏的文件系统运行
fsck。
- 为即将销毁的磁盘制作镜像转储。
执行一次重启即可退出救援模式。下次启动时会重新使用正常磁盘。
销毁
销毁不可撤销。磁盘会被零覆写,IPv4 在 24 小时冷却期后回到地址池(避免你可能已在 DNS 中发布的地址被立即复用),IPv6 /64 则立即回到地址池。由于不存在自动续订,服务器的周期会随之终止,之后不会再产生任何扣费。
每台服务器开通时都只启用基于密钥的 SSH。我们提供的默认 sshd_config 已禁用密码认证;你可以自行重新启用,但我们强烈建议不要这样做。
SSH 密钥
在账户 → SSH 密钥中添加密钥,粘贴任意 OpenSSH 格式的公钥即可。我们接受:
ssh-ed25519——推荐。简短、快速、现代。
ssh-rsa——3072 位或更长。(更短的会被拒绝。)
ecdsa-sha2-nistp256 / nistp384 / nistp521——可接受,但不推荐。
每个账户可有多个密钥,每台服务器也可有多个密钥。服务器授权列表中的任意密钥都可以登录。
推荐的 ~/.ssh/config
Host nokyc-*
User root
IdentityFile ~/.ssh/id_ed25519_nokyc
IdentitiesOnly yes
ControlMaster auto
ControlPath ~/.ssh/cm-%r@%h:%p
ControlPersist 10m
ServerAliveInterval 60
ServerAliveCountMax 3
然后,对于 IPv4 为 198.51.100.42 的服务器:
Host nokyc-edge
HostName 198.51.100.42
之后直接运行 ssh nokyc-edge 即可。
救援模式下的 SSH
救援 ISO 在启动时会注入同一组 SSH 密钥。救援主机的指纹与你正常主机的指纹不同——这是正常现象,并非中间人攻击。救援指纹显示在控制面板的控制台中。
IP 地址
- IPv4——每台服务器一个,已包含在套餐内。目前不单独出售额外的 IPv4(我们对 v4 地址的分配十分谨慎)。
- IPv6——每台服务器一个已路由的
/64,免费。该前缀内的地址可随意使用;我们不会过滤你地址块内的源地址。
- 所有地址在服务器的整个生命周期内保持不变。重建操作系统不会改变它们。
反向 DNS
在服务器 → 网络 → 反向 DNS 中设置,或通过 POST /servers/{id}/rdns。更改将在 5 分钟内生效。我们不会验证你是否真的控制对应的正向记录——rDNS 由你随意设置。
防火墙
分为两层:
- 边缘过滤器(可选,可按服务器单独配置)。有状态,默认丢弃,仅按你提供的规则放行。它运行在 hypervisor 上,能让客户机根本收不到被拦截的流量。适用于希望在客户机看到数据包之前就强制执行的第 4 层规则。
- 客户机防火墙(完全由你掌控)。
nftables、iptables、pf,你的操作系统自带什么就用什么。我们不会去动它。
DDoS 防护
针对流量型攻击的缓解始终开启,部署在我们 PoP 的上游。无需任何启用操作。阈值如下:
- < 10 Gbps:悄然吸收。
- 10–100 Gbps:在传输(transit)运营商处清洗。你可能会看到短暂的延迟上升。
- > 100 Gbps:通过 BGP 宣告到专用清洗路径。延迟上升更明显,但服务仍可访问。
- 将某个 IP 做黑洞路由(null-route)这种“核选项”,只会用于威胁整个 PoP 的持续攻击。一旦发生,我们会在几分钟内通知你。
镜像目录会在上游每次发布小版本时刷新。最右列的 image_id 就是你传给 API 的值。
| 系列 | 版本 | 架构 | 初始化 | image_id |
| Debian |
11 (bullseye), 12 (bookworm), 13 (trixie) |
amd64, arm64 |
cloud-init |
debian-13-minimal |
| Ubuntu |
20.04, 22.04, 24.04 LTS |
amd64, arm64 |
cloud-init |
ubuntu-24.04 |
| Alpine |
3.18, 3.19, 3.20 |
amd64, arm64 |
cloud-init(社区版) |
alpine-3.20 |
| Arch |
滚动更新(每周快照) |
amd64 |
cloud-init |
arch-rolling |
| Fedora |
39, 40, 41 |
amd64 |
cloud-init |
fedora-41 |
| Rocky |
9(兼容 RHEL) |
amd64 |
cloud-init |
rocky-9 |
| OpenBSD |
7.4, 7.5 |
amd64 |
手动 / autoinstall |
openbsd-7.5 |
| FreeBSD |
13.3, 14.0 |
amd64 |
cloud-init |
freebsd-14 |
| NixOS |
24.05 |
amd64 |
nixos-rebuild |
nixos-24.05 |
| 自定义 |
任意(可上传 ≤ 4 GB 的 ISO) |
amd64, arm64 |
取决于你的 ISO |
custom |
cloud-init user-data
任何标有“cloud-init”的镜像都可以在部署时接收 user-data 数据块,最大 64 KiB。以下示例用于一台安装 WireGuard 并设置主机名的 Debian 服务器:
#cloud-config
hostname: edge-paris
manage_etc_hosts: true
package_update: true
packages:
- wireguard
- nftables
- mosh
write_files:
- path: /etc/wireguard/wg0.conf
permissions: '0600'
content: |
[Interface]
PrivateKey = REDACTED
Address = 10.10.0.1/24
ListenPort = 51820
runcmd:
- systemctl enable --now nftables wg-quick@wg0
- sed -i 's/#PermitRootLogin.*/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config
- systemctl restart ssh
自定义 ISO
通过 POST /images 上传(或在账户 → 镜像 → 上传中操作),最大 4 GiB。ISO 必须能以 BIOS 或 UEFI 模式启动(我们两种模式都提供)。上传后,镜像会获得形如 custom-9f4a2b1c 的 ID,并可在任何部署流程中选用。
基于 HTTPS 的 REST。请求和响应均为 JSON。列表端点采用游标分页。所有 POST 请求都支持通过 Idempotency-Key 头传入幂等键。
- 基础 URL
- https://api.cryptovpshost.com/v1
- Tor 洋葱镜像
- CryptoVpsHostapixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.onion/v1
- TLS
- 最低 TLS 1.3。证书固定到我们的中间 CA——通过 TLSA 记录发布在 DNS 中。
- 接口描述
- OpenAPI 3.1 规范位于 /v1/openapi.json
身份验证
Bearer 令牌,请求头为 Authorization: Bearer <token>。令牌在账户 → API 令牌中创建,可选三种权限范围之一:
read——对除账单外所有资源的只读访问。
write——读取,外加创建、更新和销毁。无法生成新的充值地址。
billing——write 能做的一切,外加账单相关端点。
令牌只会在创建时显示一次。我们在服务端只保存其 SHA-256 摘要;如果令牌丢失,请轮换它。
端点
| 方法 | 路径 | 说明 |
| GET |
/servers |
列出你的服务器(分页,基于游标)。 |
| POST |
/servers |
创建新服务器。立即返回处于 provisioning 状态的资源。 |
| GET |
/servers/{id} |
获取单个服务器;部署完成后会包含其 IP 地址。 |
| DELETE |
/servers/{id} |
销毁服务器。不可撤销。返回 202 Accepted。 |
| POST |
/servers/{id}/reboot |
软重启(ACPI)。如需断电重启(power-cycle),请使用 ?hard=true。 |
| POST |
/servers/{id}/rebuild |
从镜像重新安装。磁盘上的所有数据都会被销毁。 |
| POST |
/servers/{id}/rescue |
引导进入救援 ISO(基于 Alpine,4 GB tmpfs)。 |
| POST |
/servers/{id}/rdns |
为服务器的 IPv4 和/或 IPv6 设置反向 DNS。 |
| GET |
/servers/{id}/console |
返回 noVNC 控制台的一次性签名 URL(5 分钟内有效)。 |
| GET |
/servers/{id}/metrics |
过去 30 天的 CPU、RAM、磁盘和带宽汇总数据。 |
| GET |
/images |
列出可用的操作系统镜像,包括自定义上传的镜像。 |
| POST |
/images |
上传自定义 ISO。multipart/form-data,最大 4 GB。 |
| GET |
/regions |
列出各地区及其当前可用于新部署的情况。 |
| GET |
/plans |
列出 VPS 和独立服务器套餐及当前价格。 |
| GET |
/billing/balance |
以美元参考价值及各受支持币种显示的账户余额。 |
| GET |
/billing/ledger |
交易历史(充值、周期扣费、入账)。 |
| POST |
/billing/topup |
为指定币种生成一次性充值地址。 |
| GET |
/ssh-keys |
列出与账户关联的 SSH 密钥。 |
| POST |
/ssh-keys |
添加 SSH 密钥(解析 OpenSSH 格式)。 |
| DELETE |
/ssh-keys/{id} |
删除 SSH 密钥。 |
| GET |
/account/tokens |
列出 API 令牌。权限范围(scope):read、write、billing。 |
| POST |
/account/tokens |
创建新的 API 令牌。仅返回一次,之后不会再显示。 |
示例
创建服务器:
curl https://api.cryptovpshost.com/v1/servers \
-H "Authorization: Bearer $NOKYC_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"name": "edge-paris",
"plan": "vps-s2",
"region": "par",
"image": "debian-13-minimal",
"ssh_keys": ["k_5f3a8c91"],
"user_data_b64": null
}'
响应(HTTP 201 Created):
{
"id": "srv_8a1f2c34",
"name": "edge-paris",
"status": "provisioning",
"plan": "vps-s2",
"region": "par",
"image": "debian-13-minimal",
"ipv4": null,
"ipv6": null,
"created_at": "2026-05-12T08:47:12Z",
"ssh_keys": ["k_5f3a8c91"]
}
重启它:
curl -X POST https://api.cryptovpshost.com/v1/servers/srv_8a1f2c34/reboot \
-H "Authorization: Bearer $NOKYC_TOKEN"
# 202 Accepted
错误码
所有错误都以 JSON 形式返回,结构为 {"error": {"code": "...", "message": "...", "errors": [...]}}。
| HTTP | 错误码 | 含义 |
| 400 |
invalid_request |
请求体或查询参数未通过校验。各字段的详细信息见 errors[]。 |
| 401 |
unauthenticated |
缺少 Bearer 令牌,或令牌已过期。 |
| 403 |
forbidden_scope |
该令牌不具备此端点所需的权限范围(scope)。 |
| 404 |
not_found |
资源不存在,或对你的账户不可见。 |
| 409 |
conflict_state |
资源当前所处状态不允许执行此操作(例如重建一台正在重建的服务器)。 |
| 422 |
unprocessable |
请求体已解析,但语义校验失败(例如所选套餐在该地区不可用)。 |
| 429 |
rate_limited |
超出速率限制窗口。响应中包含 Retry-After 头。 |
| 451 |
jurisdictional_block |
该端点因法律原因被拒绝。公开的金丝雀声明已更新。 |
| 500 |
internal |
服务器端错误。仅应重试幂等操作。 |
| 503 |
maintenance |
计划维护窗口期间,该端点暂时不可用。 |
速率限制
每个令牌每分钟 60 次请求,允许 10 次请求的突发。令牌桶以每秒 1 次请求的速度补充。每个响应都会携带以下头部:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 1747049892
如果超出限额,你将收到 HTTP 429,并附带以秒为单位的 Retry-After 头。部署类端点使用单独且更宽松的限额(200 次/分钟),因为它们天然具有突发性。
磁盘加密
我们不会替你加密磁盘。你可以在安装时通过 cloud-init 选择启用 LUKS(救援 ISO 会在每次启动时提示你输入口令)。我们不自动加密的原因:
- 用我们持有的密钥进行自动加密只是作秀——一旦被迫,我们就能交出密钥。
- 用你持有的密钥进行自动加密,会导致无人值守的重启无法进行。
- 两种模式都可用;取舍由你来选。
金丝雀声明
我们每天签署并发布一份金丝雀声明,地址为 https://cryptovpshost.com/canary.txt,其分离式 PGP 签名位于 canary.txt.sig。声明包含:
- 当前日期的时间戳。
- 一条我们事先无法预料的当前新闻的标题(作为时效证明)。
- 一份明确声明清单,列明我们没有收到的各类命令。
当其中某项声明将变为不实时,我们会选择让金丝雀声明停止更新。请把长时间的沉默(> 48 小时)视为一种信号。
Tor 洋葱镜像
网站和 API 都以 v3 洋葱服务(onion service)的形式提供镜像。其主机名以 TXT 记录的形式发布在 cryptovpshost.com 的 DNS 中,并每年轮换。通过 Tor 路由的客户端可这样查询:
dig +short TXT _onion.cryptovpshost.com
# "v3 CryptoVpsHost...........................................onion"
# "v3 CryptoVpsHostapi........................................onion/v1"
我们记录什么
简而言之:
| 数据 | 保留期限 | 用途 |
| 登录事件(时间戳、国家,粒度到城市) | 30 天 | 用于入侵检测。仅记录国家,来源于 MaxMind GeoLite,不存储 IP。 |
| API 请求日志行(方法、路径、状态码,不含请求体) | 7 天 | 用于调试。7 天后轮转,不留存档。 |
| 账单历史 | 13 个月 | 用于对账。不附带个人身份信息。 |
| 每台服务器的网络探测数据(在线率、延迟) | 90 天 | 用于 SLA 计算和公开状态页。 |
| 客户机 VM 流量(NetFlow、抓包) | 0 | 这两者我们都不收集。 |
由真正在运行这些东西的人撰写。每篇都是一份可直接复制粘贴的完整流程——不会让你在五十个标签页的营销内容里绕来绕去。
我的部署已经处于“provisioning”状态超过 5 分钟
部署通常需要 30–90 秒,超过 3 分钟就不正常了。请先查看状态页,确认你所在地区是否有故障。如果状态页一切正常,最常见的原因是自定义 ISO 无法启动——请检查 noVNC 控制台。如果都没用:销毁后重新部署。部署失败不会向你收费。
我弄丢了 SSH 密钥
在控制面板中依次点击:服务器 → 恢复 → 进入救援模式。用你账户中任一有效密钥通过 SSH 登录救援系统。执行 mount /dev/vda1 /mnt,编辑 /mnt/root/.ssh/authorized_keys,然后重启。如果账户里一个密钥都没有,请先在控制面板中添加一个,再进入救援模式。
我的 IPv4 在一个国家能访问,在另一个国家却不能
请从两端分别做一次 traceroute。如果路由在到达我们的 PoP 之前就已分叉,问题出在我们的上游——你可以在 status.cryptovpshost.com 查看你所在地区 transit 的公开 smokeping。如果路由能到达我们但随后中断,那就是我们的问题,状态页应该已经有所反映。
我的 VPS 自己重启了
三种可能的原因,按可能性从高到低排列:(1) init 被 OOM 杀掉——请查看上一次启动的日志:journalctl -k -b -1。(2) 计划内维护——请查看控制面板中的通知。(3) hypervisor 故障——请查看状态页。如果三者都不是,请打开 noVNC 控制台查看启动日志。
我向充值地址转了加密货币,但没有任何反应
请先查看确认数。比特币需要 2 个,门罗币需要 10 个,等等(见支持币种表)。如果已确认但 30 分钟后仍未入账,请将交易哈希粘贴到账户 → 账单 → 找回充值中——我们人工复查后,几分钟内即可入账。
调用 API 时收到 429 Too Many Requests
你已用完该令牌的限额。请遵守 Retry-After 头。如果确有更高吞吐量的需求,请再创建一个令牌——速率限制按令牌计算,而大多数客户端只使用一个令牌。(不要在循环里反复轮换同一个令牌;我们仍会把它视为同一个令牌。)
noVNC 控制台显示空白屏幕
按任意键。许多客户机在闲置一段时间后会让帧缓冲(framebuffer)黑屏。如果按键没有任何反应,客户机很可能已卡死;请在控制面板中重启。控制台在 Linux 上也能捕获 SysRq 序列——这在调试无响应的内核时很有用。
你们会要求提供身份证件吗?
不会。我们不索取,不接收,即使你发来,我们也不会保存。整个架构的设计目标,就是让我们手里没有可交出的身份信息。
为什么只收加密货币?
银行卡网络在设计上就强制要求 KYC——商户协议里有明文规定。加密货币则没有。引入法币就意味着引入支付处理商,而引入支付处理商就意味着把对方的合规部门纳入我们的信任边界。我们不想这样。
我可以有多个账户吗?
可以。我们不做指纹识别,不会跨账户用设备 Cookie 关联,我们并不在意。想用多少个邮箱地址都可以。
如果我的加密货币服务商要求我做 KYC,会怎样?
那是你和对方之间的事。我们不与加密货币交易所沟通,它们账面上只会看到一笔转往某个地址的提现。仅凭地址,它们无法判断这笔钱是转给我们的。
你们提供退款吗?
退到账户余额,可以;退回钱包,不可以——加密货币的转账不可逆,而退款需要我们确认某个地址属于你,这本身就是一个 KYC 环节。
VPS 和独立服务器有什么区别?
VPS = 共享 hypervisor 上的 KVM 虚拟机,支持热迁移,宿主机有冗余。独立服务器 = 一整台物理服务器,独占使用,不支持热迁移。对几乎所有人来说,VPS 都是正确的选择。
你们支持 Terraform / Pulumi / OpenTofu 吗?
Terraform provider 已在路线图上;在此之前,REST API 已足够稳定,写一个小封装大约只需一天。写好之后,欢迎给我们提交 pull request。
我可以运行 Tor 中继或出口节点吗?
中继可以,出口节点不行——并不是因为我们反对,而是因为出口节点带来的滥用投诉(abuse)处理,与我们“不设投诉邮箱”的立场不相容;我们宁可坦率说明,也不愿让你搭好之后,又收到一封销毁通知而措手不及。
你们有 Discord / Slack / 客服聊天吗?
没有。我们不提供实时支持渠道,因为我们的业务模式并不需要它(没有工单,就没有背后的人工队列)。文档就是支持渠道;如果有遗漏,那就是我们想知道的 bug。
如果有人投诉我的服务器怎么办?
我们不会转发。我们不设投诉邮箱,这是刻意的架构选择,而非疏漏。你唯一会收到的来自我们的消息,是我们被送达具有约束力的法院命令的通知——即便如此,只要命令没有对我们下达封口要求,我们也会在采取行动之前通知你。