技术指南

首次购买 VPS:用验收窗口验证交付、账单与退出

把首次购机变成有截止时间的交付验收:核对账单与退出边界,验证镜像、SSH 身份、网络和恢复。

第一台 VPS 不是一组越大越好的规格,而是一段有截止时间的验收。下单前保存价格、计费、续费、资源边界和退出动作;交付后先验证控制台、系统镜像、SSH 身份、网络与恢复,再放入不可替代的数据。无法在验收窗口内证明的能力,应保持未知或拒绝接收。

来源覆盖购买流程,本文改写为验收契约

归档来源完整介绍用途、配置、地区、付款、控制面板和首次连接,可保留的是先明确需求、短周期验证、识别重装风险、检查网络和保留控制台。供应商排名、固定价格与规格、固定退款/换 IP/宽限期、单一风险分数、加密货币入口和“一键升级全部”没有跨供应商证据,本文不沿用。

先把用途写成负载和恢复约束

问题下单前写清验收方式
计算常驻与峰值 CPU、架构、突发是否可接受固定负载窗口记录 steal、频率与延迟
内存工作集、并发、缓存与 OOM 后果冷启动和峰值路径不触发不可解释 OOM
存储有效容量、增长、随机/顺序 I/O、恢复时间确认设备与文件系统后做可删除样本
网络用户地区、协议、端口、出站量与 IPv6从真实客户端分时段测往返、丢包与应用流
恢复RPO、RTO、控制台、重装和异地副本在无生产数据时完成一次恢复或重建

配置应来自工作集和故障成本,而不是“新手套餐”。已有容量规划和线路核验记录可以复用,但订单仍需给每一项约束填入当前证据、截止时间和拒绝条件。

把结账页快照成一份可比较的事实表

示意字段;保存当前页面、币种、税费、续费价、区域差异和取得时间,不能把营销摘要当成合同
captured_at: 2026-08-18T00:00:00Z
provider: example-provider
plan: candidate-small
region: example-region
virtualization: kvm
cpu_arch: amd64
vcpu: 2
memory_mib: 2048
disk_gib: 40
ipv4: included
ipv6: included
transfer_gib: 2000
overage: documented
billing: hourly-capped-monthly
renewal: manual
delete_stops_compute_billing: documented
residual_resources: [snapshot, volume, reserved-ip]
console_or_rescue: documented
terms_url: https://provider.example/terms
pricing_url: https://provider.example/pricing
  • 确认 CPU 是共享、突发还是专用,以及限速或公平使用边界。
  • 确认磁盘类型、可用容量、快照/备份是否另计费,以及缩容是否需要迁移。
  • 确认流量统计方向、周期、超额处置、IPv4 费用和未绑定资源费用。
  • 确认取消自动续费、关机、销毁实例、删除卷/快照/IP 分别意味着什么。
  • 确认退款、试用、身份核验、内容限制和争议流程只来自当前条款。

关机、销毁与停止计费是三个不同动作

计费不能按经验外推。DigitalOcean 当前支持文档给出一个明确反例:Droplet 关机后仍计费,停止计算费用需要销毁;其销毁文档还说明快照、卷和卷快照不会默认一起删除。其他供应商可能采用不同模型,因此下单前要把“如何停止每一种费用”逐项写入退出表。

资源停止计算/续费的动作仍需确认
实例供应商明确的 destroy/delete/cancel当期费用、最低周期、销毁确认与审计记录
系统盘/数据卷按资源单独删除或取消实例删除后是否保留、快照依赖与恢复顺序
快照/自动备份取消策略并按需删除保留期、下载/迁移能力和删除不可逆性
公网 IP释放或重新绑定未绑定 IP、IPv4 与流量是否收费
附加服务逐项停用监控、对象存储、负载均衡、税费与余额

选择仍受支持且能重建的系统镜像

不要把文章中的固定版本当作长期默认。Debian 当前官方发布页显示 Debian 13 是 stable,Debian 12 已是 oldstable;同一页面还列出各版本支持阶段。下单时核对供应商镜像名称、架构、发布日期、cloud-init 支持和安全更新渠道,并记录未来迁移路径。

  1. 应用依赖和自动化必须支持目标发行版与 CPU 架构。
  2. 优先供应商可追溯的官方镜像;第三方预装镜像需要额外供应链审查。
  3. 确认重装会改变哪些磁盘、IP、SSH host key 和实例标识。
  4. 在写入数据前完成一次重装或替代重建演练;无法重建的手工状态视为缺陷。

购买前先验证带外控制面与身份恢复

能力正向检查失效边界
Web/串行控制台不依赖 SSH 可登录或看到启动日志账号、MFA 或平台故障仍可能同时阻断
救援系统能挂载目标磁盘并读取基线标记加密卷需要独立密钥,网络策略可能不同
重装明确目标磁盘、镜像、host key 和 IP 变化通常是破坏性动作,不等于恢复数据
账号恢复MFA 恢复码和账单身份离线保存邮件账户不能与云账号形成单点
支持工单知道类别、身份验证与状态页入口响应时间和补救不应被假设

实例创建前先准备客户端密钥和 host key 验证渠道

私钥留在受控客户端并设置口令;把公钥交给供应商或 cloud-init,不能上传私钥
umask 077
ssh-keygen -t ed25519 -a 64 -f ~/.ssh/vps-first -C 'vps-first-admin'
ssh-keygen -lf ~/.ssh/vps-first.pub

客户端密钥证明操作者身份,服务器 host key 证明连接目标,二者不能互相替代。OpenSSH 当前手册要求首次连接显示服务器公钥指纹;应从供应商控制台或另一条受信渠道取得 `/etc/ssh/ssh_host_ed25519_key.pub` 的指纹后再接受。只在同一未验证网络上运行 `ssh-keyscan` 不能独立证明目标身份。

示例地址必须替换;host key 在重装或迁移后变化时,先重新核对原因和新指纹,不能直接删除告警
# On the provider console or another trusted channel:
sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

# On the client, require the pre-verified host key:
ssh -i ~/.ssh/vps-first \
  -o StrictHostKeyChecking=yes \
  -o UserKnownHostsFile=~/.ssh/known_hosts \
  [email protected]

等待镜像初始化完成再解释登录和包状态

cloud-init 当前文档把首次启动分为 Detect、Local、Network、Config 和 Final;包安装与用户脚本可能直到 Final 才运行。SSH 可用不代表全部初始化已结束,抢先改包、用户或网络可能与仍在运行的自动化竞争。

先保存失败状态与日志,再决定重跑、修复或重建;不要在未知状态下删除 cloud-init 缓存
cloud-init status --wait --long
sudo journalctl -u cloud-final.service --no-pager
sudo test -e /var/lib/cloud/instance/boot-finished

# If cloud-init is absent, identify the provider's actual initialization service.
systemctl --failed --no-pager

第一次登录只做可回放的只读盘点

输出可能包含公网地址、主机名、用户、内部路由和服务;保存到私有验收记录,分享前脱敏
date --utc --iso-8601=seconds
uname -a
cat /etc/os-release
systemd-detect-virt
lscpu
free -h
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS
df -hT
ip -brief address
ip route show
ss -lntup
systemctl --failed --no-pager
交付项证据拒绝或升级工单
身份订单 ID、实例 ID、区域、镜像、架构一致交付对象或区域不符
计算/内存vCPU 与内存不低于订单,虚拟化可识别规格短缺或持续异常 steal/OOM
存储设备、文件系统、挂载与有效容量明确未知附加盘、I/O 错误或容量不符
网络IPv4/IPv6、路由、DNS 与必需端口实际可用单一路径或第三方分数被当作全部结论
启动初始化完成、无未解释 failed unitcloud-init/启动错误未处置
恢复控制台、救援、重装和账号恢复至少完成演练唯一恢复通道仍是待修改的 SSH

从真实使用地测路径,不给 IP 贴永久标签

多点 ping、端口检查、ASN、反滥用或地理数据库都只是时间与数据源受限的观测。ICMP 全丢不能单独证明 TCP/HTTPS 不通,风险分数也不能证明身份或未来可用性。按目标用户、协议、IPv4/IPv6、时段和应用请求采样,并保存原始结果与测量点。

从至少一个真实客户端网络重复;示例地址和域名必须替换,verbose SSH 日志外发前脱敏
date --utc --iso-8601=seconds
getent ahosts your-service.example
ping -c 10 203.0.113.10
ssh -vv -o ConnectTimeout=8 [email protected] true
curl --fail --silent --show-error \
  --connect-timeout 5 --max-time 20 \
  --write-out 'remote=%{remote_ip} connect=%{time_connect} tls=%{time_appconnect} total=%{time_total} status=%{http_code}\n' \
  https://your-service.example/health

通过基线后才做一次一层的安全变更

  1. 确认控制台/救援可用,并保留当前 SSH 会话和第二个未断开的验证会话。
  2. 读取发行版安全公告与待升级包;先做快照或可恢复备份,不把 `upgrade -y` 当成无条件初始化。
  3. 创建日常管理身份并验证新密钥会话,再收紧 root、密码认证和防火墙。
  4. 每次只改变一层:账号、SSH、防火墙、更新或应用;每层都有正向和拒绝检查。
  5. 内核、SSH、网络或引导变更后安排可观察重启,并从外部路径重复验收。

在放入重要数据前恢复一个已知标记

快照、供应商备份和文件备份覆盖范围不同。至少把恢复凭据、备份目标和删除权限与 VPS 分离,创建一个带随机内容的验收文件,备份后恢复到新目录并比较摘要。restic 当前文档还区分仓库结构检查和读取 pack 数据的 `--read-data`,两者都不能替代实际恢复。

按真实仓库与 shell 调整路径;临时恢复目录和进程替换语法不是所有环境都相同,验收记录要保存实际命令与结果
printf 'first-vps-acceptance\n' > acceptance-marker.txt
sha256sum acceptance-marker.txt > acceptance-marker.sha256

restic backup acceptance-marker.txt
restic check
restic restore latest --target /tmp/first-vps-restore
sha256sum --check <(sed 's#  #  /tmp/first-vps-restore/#' acceptance-marker.sha256)

验收失败时先保全证据,再逐项退出

  • 保存订单、实例 ID、UTC 时间、状态页、控制台截图和最小化诊断,不公开密码、令牌或证件。
  • 在工单中描述期望、实际、测量位置、时间、可复现步骤和原始错误,不先声明供应商原因。
  • 需要迁移时先恢复数据和服务到替代实例,再验证 DNS、证书和外部入口。
  • 按退出表删除实例、卷、快照、备份、保留 IP 和附加服务,并保存每项确认。
  • 回到账单页确认没有活动资源或计划续费;退款仅按当前订单条款处理。

隔离演练验证了验收门禁与 SSH 身份

VPScope 在权限 0700 的一次性目录和独立网络 namespace 中生成合成订单、客户端 key、服务器 host key 与另一枚错误 host key。完整订单通过门禁,缺少明确删除计费、控制台/救援或恢复验证的候选被拒绝;OpenSSH 9.6p1 的候选配置通过语法检查。

客户端使用预先固定的正确 host key 和独立私钥登录回环 sshd,得到基线发布标记;错误 host key 与缺少客户端 key 均以退出码 255 失败。允许密码/root 密码登录的候选被两项规则拒绝,恢复后的 sshd 配置 SHA-256 与基线完全一致,进程、namespace、监听和临时目录清理通过。演练没有购买 VPS、访问真实控制台、运行 cloud-init、产生账单、测公网路径或恢复远端备份。

第一台 VPS 接收前的可复查清单

  • 用途已经写成计算、内存、存储、网络与恢复约束。
  • 价格、币种、税费、续费、超额、退款与取得时间有当前记录。
  • 关机、销毁和逐项删除附加资源的计费边界已经核对。
  • 区域、架构、镜像来源和支持阶段满足应用与维护窗口。
  • 控制台、救援、重装、账号恢复和支持入口在变更前可用。
  • 客户端密钥在本地生成,服务器 host key 通过独立受信渠道核对。
  • cloud-init 或等价初始化完成,失败状态与日志已保存并处置。
  • 订单与实际 CPU、内存、磁盘、地址、路由、监听和启动状态一致。
  • 网络结论来自真实应用路径和多个时段,不来自单一 ping 或风险分数。
  • 安全变更逐层发布,第二会话和带外恢复在收紧期间保持可用。
  • 重要数据进入前,异地备份已恢复并核对已知标记。
  • 验收失败的迁移、资源删除、续费取消和账单复核都有证据。

返回知识库