ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

免费云服务器防扣费全链路:申请、配置与到期撤离

免费云服务器防扣费全链路:申请、配置与到期撤离

去年这个时候,一位朋友兴冲冲地跟我说薅到了一台免费云服务器,一年不要钱。三个月后他收到一条扣费短信,九块八。钱不多,但那种感觉很难受——明明是"免费"的,怎么就从兜里掏钱了。我自己这些年陆陆续续用过七八家云厂商的免费额度,踩过的坑从"到期没提醒"到"快照悄悄计费"、"流量跑超按量扣费"都有。所以这篇东西不讲虚的,就把免费云服务器从申请到配置、再到怎么防止被扣钱这一整条链路上的关键节点拆开说清楚。

免费云服务器,说白了就是云厂商为了拉新用户,给出的限时或限量计算资源。它能让没有预算的学生、独立开发者、小团队用几乎零成本跑起一个网站、一个测试环境、一个定时任务脚本。但它解决的问题只是"有没有机器用",并不解决"用得省不省心"。真正容易出问题的地方,往往不在申请那一步,而在后面三个月的使用期里。这篇内容适合三类人看:一是第一次碰云服务器、连 SSH 都没用过的新手;二是用过但被莫名扣过费的;三是想把手头免费额度用扎实、不浪费也不越界的人。下面按申请前、配置中、使用后三个阶段的顺序来讲,中间会穿插具体命令、参数算法和踩坑记录。

1. 免费额度到底"免"的是什么——先把账算明白

1.1 三种常见的免费形态

云厂商给的"免费"从来不是一个意思。我把它归成三类,这三类的风险点完全不一样。

第一类是新用户试用型。注册账号后可以领一到三个月的试用资源,规格还不错,2核4G、5M带宽这种也常见。它的特点是"限时",到期之后要么停机,要么——注意这一点——自动转成按量计费。后者就是大多数人被扣钱的第一来源。

第二类是长期免费型。某些厂商会提供一台低配实例长期免费,比如1核1G、1M带宽、20到40G系统盘。这类资源通常要求你每月手动续期或者保持账号活跃,规格低但胜在稳定,适合放个静态博客、跑个监控脚本。

第三类是活动赠送型。比如代金券、时长券、开发者扶持计划。这类资源最零碎,有效期各不相同,有的券只能抵扣特定产品,有的券过期不提醒,你以为还有额度,实际早就失效了。

我做过一张对照表,申请之前先对着看清楚:

免费形态典型期限到期行为主要风险
新用户试用1-3个月停机或转按量计费到期无提醒、余额被扣
长期免费长期(需续期)到期释放或降配忘记续期、规格被收回
活动赠送7天-1年不等券失效、资源按原价计券适用范围窄、过期无通知

判断标准很简单:看它到期之后是"停"还是"转"。写"到期停止服务"的相对安全,写"到期后按量计费"的必须提前处理。这一条我在后面第 4 章还会展开。

1.2 试用期与长期免费的本质区别

很多人把这两种混为一谈,结果就是试用到期后一脸懵。区别在哪?试用期本质是一次营销投放,厂商赌的是你用顺手了就不想迁走,所以试用期结束的处理方式设计得越"顺滑"越好——不停机、直接转付费,你甚至感知不到切换。长期免费本质是留存工具,它要的是你持续登录、持续活跃,所以会设续期门槛。

我个人的做法是:试用型资源只用来做短期压测、编译、临时跑批,绝不往上放需要长期存活的数据;长期免费型才用来承载博客、监控面板这类常驻服务。这个分工一旦定下来,后面很多决策就顺了。

还有个细节容易忽略:同一个账号下的试用资格通常只有一次。你上次领过,这次换个手机号注册,系统大概率能识别出关联,判定你不是新用户。这不是什么秘密规则,各家都在用户协议里写明了,只是没人看。

1.3 藏在角落里的收费项

真正让账单冒出来的,往往不是那台主机本身,而是主机周边的"配件"。我列一份最常见的清单,都是我自己或身边人实际被扣过的:

  • 公网流量。很多免费套餐给的是"带宽"而不是"不限流量",超出流量包之后按 GB 计费,单价从几毛到一块多不等。这是第一大坑。
  • 快照与镜像。免费快照通常只给几个名额,超出部分按容量和时长计费,而且快照是增量存储,放久了会越积越多。
  • 弹性公网 IP。有的厂商实例自带的公网 IP 免费,但你额外申请一个挂着不用,闲置也要收费。
  • 对象存储。存储容量可能免费,但外网下行流量和请求次数照收。
  • 镜像市场的商业镜像。公共系统镜像免费,但某些预装环境的商业镜像按小时计费,开机器的时候不注意就带上了。
  • 负载均衡、数据库、缓存。这些附属产品常常有"首月免费",第二个月开始计费,而你的代码还连着它。

提示:开机器之前,把订单页往下拉到底,看清楚"包含"和"不包含"两栏。很多人只看了价格是 0 就点了确认。

2. 申请前想清楚的几件事,能省掉后面80%的麻烦

2.1 账号资质与新用户判定

申请这一步本身没什么技术含量,但有几点决定了你后面能不能顺利拿到资源、会不会被判定为异常。

第一,账号需要完成身份验证才能开通云资源,这是所有厂商的通用要求,绕不过去,也不建议绕。个人账号和企业账号的免费额度通常不叠加,一个人拿多个账号去刷额度,轻则资格被取消,重则账号受限,不值当。

第二,新用户判定看的是"证件+手机号+支付方式"的组合,不是单一维度。换个手机号但用同一张支付方式,大概率还是被判为老用户。与其折腾这个,不如老老实实把手上的一个账号用好。

第三,部分免费套餐要求账号完成一定的活跃动作才能领取,比如绑定支付方式、完成一次实名、或者加入某个开发者计划。这一步的信息在活动页面的细则里,通常是折叠状态,需要手动点开。

2.2 选型:按用途而不是按参数

新手最容易犯的错是"参数越大越好"。免费额度就那么多,选了高配反而可能占用掉别的资源额度,或者直接超出免费范围。我的建议是先想清楚用途,再倒推规格:

用途建议规格说明
学习 Linux、练命令1核1G够用,重点是别装图形界面
静态博客、文档站1核1G + 1M带宽页面小、访问少完全扛得住
轻量 API、定时任务1核2G留点内存给运行时和日志
数据库/中间件测试2核4G内存不够会频繁 OOM
编译、打包2核4G 起编译吃 CPU 和内存,低配会卡很久

这里有个关键认知:1核1G 的瓶颈通常不是 CPU,而是内存。现代 Linux 发行版空载就要吃掉 200-400MB,再跑个 MySQL 或者 Java 服务,1G 内存根本不够,系统会触发 OOM Killer 直接杀掉进程。所以低配机器上,要么选轻量运行时,要么老老实实加 swap,这个在第 3.4 节会讲具体做法。

2.3 支付方式绑不绑,怎么绑

这是很多人纠结的点。不绑支付方式,有些平台的免费资源根本开不了机;绑了,又怕被悄悄扣钱。

我的实际做法是:绑,但绑一个余额很少、或者有单笔限额的支付方式。逻辑很直白——真出了意外扣费,损失被限制在一个很小的范围内,同时账号又能正常开通资源、接收账单通知。比起完全不绑导致功能受限,这个折中更实用。

另外,开通之后第一件事是去费用中心把账单通知打开,包括短信、邮件、站内信三个渠道。别嫌烦,这是你发现异常扣费最快的一条通道。我见过太多人是等到余额被扣光、服务停了才反应过来。

3. 从零配置一台可用实例的完整流程

3.1 地域、镜像与实例规格的取舍

开机器的时候有三个下拉框要选:地域、镜像、规格。三个都有讲究。

地域选离你的主要访问者近的,物理距离直接影响延迟。如果你只是自己练手,选你所在区域附近的机房就行。另外注意,同一厂商不同地域的免费额度可能不通用,开之前确认一下你领的额度在哪个地域可用。

镜像这一项最容易踩坑。公共镜像里的纯净系统(比如某个主流 Linux 发行版的最小安装版)是免费的,但镜像市场里那些"预装宝塔""预装 Docker 环境""一键建站"的商业镜像,很多是按小时计费的。你开机器时手一滑选了它,机器跑起来就开始计费,而界面上不会有任何显眼的红色警告。

规格就按第 2.2 节的表来。有一个细节:部分平台在选规格时会默认勾选"高性能云盘"或者"ESSD",这类盘的单价高于普通云盘,如果免费额度只覆盖普通盘,差价会按量扣。系统盘 20-40G 对我们这种用途足够了,没必要往上加。

3.2 安全组:最小化开放原则

机器开出来第一件事不是装环境,是配安全组(有的平台叫防火墙)。原则只有一条:默认全关,按需开。

最常见的新手配置是把 22 端口对 0.0.0.0/0 全开,方便自己随时连。这个做法的代价是,机器上线几小时内就会被扫描器盯上,日志里一天几万条爆破记录是常态。这些记录不仅占磁盘,还可能拖慢 SSH 响应。

我的配置是这样:

  • 22 端口(或者自定义的 SSH 端口):只对我自己的固定出口 IP 开放,来源填具体 IP 段,不填 0.0.0.0/0。
  • 80 / 443:对外提供服务时才开,且只开这两个。
  • 其他端口:需要时临时开,用完立刻关。
  • 数据库端口(3306、6379 之类):永远不对公网开,走内网或者 SSH 隧道。

出口 IP 会变怎么办?家里宽带拨号、公司网络切换都会换 IP。我的处理方式是留一个备用的放行规则,或者干脆用厂商提供的网页版远程连接(VNC)先登进去改规则。这个应急通道一定要提前确认在哪,别等被自己关在门外了才去找。

3.3 密钥登录与系统初始化

密码登录的风险不用多说,直接上密钥。流程分三步:本地生成密钥对、把公钥传到服务器、关闭密码登录。

本地生成(如果还没有的话):

ssh-keygen -t ed25519 -C "free-vm" -f ~/.ssh/free_vm_ed25519

创建实例时把公钥内容粘进去,或者开机后用密码登录一次再手动写入~/.ssh/authorized_keys。

登录命令:

ssh -i ~/.ssh/free_vm_ed25519 -p 2222 dev@<公网IP>

这里我建议做两件事:改 SSH 端口、建一个普通用户。改端口能过滤掉绝大部分无差别扫描;建普通用户是为了避免直接拿 root 操作,误删文件的时候还有一道缓冲。

sudo useradd -m -s /bin/bash dev sudo usermod -aG sudo dev sudo mkdir -p /home/dev/.ssh sudo cp ~/.ssh/authorized_keys /home/dev/.ssh/ sudo chown -R dev:dev /home/dev/.ssh sudo chmod 700 /home/dev/.ssh sudo chmod 600 /home/dev/.ssh/authorized_keys

然后改/etc/ssh/sshd_config,把端口、密码登录、root 登录三项一起处理:

sudo sed -i 's/^#\?Port .*/Port 2222/' /etc/ssh/sshd_config sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config

注意:重启 sshd 之前,务必先开一个新终端用新配置登录验证一次,原来的终端别关。我吃过这个亏——配置写错一个字符,重启之后所有连接全断,只能去网页控制台开 VNC 救回来,折腾了半小时。改配置前先备份一份sshd_config.bak是基本功。

如果系统的防火墙(ufw 或 firewalld)也开着,记得同步放行新端口,否则会出现"安全组开了、系统墙没开"的经典死局。

3.4 运行环境与基础防护部署

机器能连上之后,做一轮基础加固。这几步都不复杂,但对低配机器的稳定性影响很大。

第一,加 swap。1G 内存的机器,建议给 1G 到 2G 的 swap。它不是用来提升性能的,是防止进程被 OOM 直接杀掉。比如编译一个稍大的包,内存瞬间冲高,有 swap 顶着就不会崩。

sudo fallocate -l 1G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

写完 fstab 记得sudo swapon --show和free -h确认生效,并且重启一次验证 fstab 那一行没写错。fstab 写错会导致系统起不来,这是另一个经典坑。

第二,设置时区。默认是 UTC,你排查日志的时候会发现时间对不上,容易误判。用timedatectl list-timezones查到自己所在的时区,sudo timedatectl set-timezone <你的时区>设过去。

第三,做一次系统更新。免费镜像的初始版本往往比较老,先sudo apt update && sudo apt upgrade -y(或者对应的包管理器命令)走一遍,能省掉后面一堆依赖问题。

第四,装一个轻量的防爆破工具。比如 fail2ban,它读 SSH 日志,同一个 IP 连续失败几次就临时封掉。

sudo apt install -y fail2ban sudo systemctl enable --now fail2ban

配好之后sudo fail2ban-client status sshd能看到当前封禁列表,心里就有数了。

第五,控制日志大小。低配机器的系统盘通常只有 20-40G,日志能把盘写满。我习惯加一条定期清理:

sudo journalctl --vacuum-size=100M

放进 crontab 每周跑一次,或者用 logrotate 统一管。磁盘写满的后果很直接——服务起不来、SSH 登不进、数据库报错,而且报错信息往往指向别的地方,排查起来很绕。

4. 防扣费的核心动作:把"自动"两个字都关掉

4.1 自动续费、自动升级与自动快照

这一节是整篇的重点。我统计过自己和身边人遇到的扣费案例,超过一半跟"自动"有关。

自动续费。开通免费资源时,页面底部经常有一个默认勾选的"到期自动续费"。这个勾选在很多平台上是浅灰色的,字很小。勾着的时候,到期后系统会直接从你的支付方式扣钱续费,而且往往是按原价,不是按免费价。我的做法是开通完成后立刻去资源详情页确认这个开关的状态,如果是开的,关掉。

自动升级。有些套餐写着"免费版",但配置了"用量超限自动升级到付费版"的逻辑。比如流量包跑完,自动切换到按量计费档位。这个不是坏事,但你必须知道它存在。

自动快照。部分平台的云盘默认开启自动快照策略,每天打一次,保留若干份。免费额度内没问题,超出之后按容量收费。我之前有一台机器,跑了两个月没管,快照累积了十几个,扣了二十多块。金额不大,但完全是可以通过关闭策略避免的。

提示:把这三项处理完之后,去"费用中心 - 资源实例"里截一张图存档。到期前如果出现争议,这张图能说明你当时的配置状态。

4.2 带宽与流量的计费方式怎么选

这是第二大坑,也是最容易算错的地方。云服务器的公网计费通常有两种模式:固定带宽和按使用流量。

固定带宽的意思是,你买多少 Mbps,就一直能用这么多,费用固定,不随用量变化。按流量计费的意思是,带宽上限可以很高,但按实际跑出去的 GB 数收钱。

免费套餐里给的通常是"固定带宽",比如 1M 或者 3M,同时附带一个月度流量包。这里的关键是:带宽小不代表流量少,流量包用完照样扣钱。

算一笔账。1Mbps 带宽的理论下行速度是 128KB/s,一个月满负荷跑满:

  • 每秒 128KB
  • 一天 86400 秒,约 10.5GB
  • 30 天约 316GB

这是理论上限,实际受限于对端、协议开销、访问量,能跑到一半就不错了。所以 1M 带宽配 300G 流量包,正常个人站点根本用不完。但如果你在这台机器上跑下载、做图床、挂代理转发大文件,几百 G 一天就能跑光。跑光之后,超出部分按量计费,单价通常在 0.5 到 1 元/GB 之间,而且不会有明显弹窗提醒。

我的建议是:用免费机器就别干重流量的活。图片压缩后再传、别做公开的下载站、日志和备份往本地拉而不是往外推。如果确实需要监控流量,在机器上装个 vnstat,每天看一眼:

sudo apt install -y vnstat vnstat -d

月度统计出来,心里就有数了,能在跑超之前做调整。

4.3 预算告警与消费看板

光靠自己记是不够的,得让系统替你盯。主流云平台都有"预算告警"功能,设置一个阈值,比如每月 1 元,一旦产生费用就发通知。这个功能免费,配置三分钟,强烈建议开。

配置路径各家不同,但逻辑一致:费用中心 → 预算管理 → 新建预算 → 设金额和通知方式。阈值我一般设两级:1 元提醒(说明有按量计费产生了,需要查)、10 元提醒(说明问题不小了)。

除了告警,还要养成一个习惯:每周看一次账单明细。不是看总额,是看条目。账单里会列出每个产品的用量和单价,哪一项从 0 变成了非 0,一眼就能看出来。我自己的经验是,异常扣费在账单明细里都有迹可循,只是多数人从来不看。

4.4 到期前的撤离预案

免费资源总会到期,区别只是你有没有准备。我的做法是提前 7 天动手,留出足够的缓冲。

撤离清单大概是这几项:

  1. 数据打包。代码、数据库、配置文件,统一打包拉回本地。数据库别只导 SQL,把配置文件也带上,重装的时候能省一半时间。
  2. 环境清单记录。装了哪些包、开了哪些服务、crontab 里有什么、改了哪些系统配置。我当时嫌麻烦没记,后来迁移的时候花了两个小时回忆"这台机器上到底跑着什么"。
  3. 镜像导出(如果平台支持且免费)。有的平台允许把实例导出成镜像存到对象存储,但要注意对象存储本身的费用。
  4. 解绑与释放。资源释放之后,确认公网 IP、云盘、快照都一并清理掉,别留下"僵尸资源"继续计费。
  5. 关掉所有自动项。在第 4.1 节关过一次,撤离时再确认一遍,防止中途被重新打开。

注意:资源释放后数据通常无法恢复,各平台的保留期不同,有的几小时有的几天。别抱着"过两天再弄"的心态,到期日就是 deadline。

5. 踩过的坑与排查实录

5.1 连不上、卡、慢的三类原因

SSH 连不上是最常见的求助场景。我的排查顺序固定为四步,基本能覆盖九成情况。

第一步,看安全组。新开的机器连不上,八成是安全组没放行端口。检查来源 IP 是不是写成了具体地址而你的出口 IP 变了,检查端口号是不是和 sshd 配置一致。

第二步,看系统内防火墙。安全组开了但系统墙没开,连接一样会被拦。sudo ufw status或者sudo firewall-cmd --list-all看一眼。

第三步,看服务状态。sudo systemctl status sshd,服务没起来或者起在别的端口上,都会导致连不上。改过端口的机器尤其容易出现这个。

第四步,看资源。内存打满、CPU 100%、磁盘写满,任何一种都会让 SSH 响应极慢甚至超时。这时候要用网页控制台的 VNC 进去看top、free -h、df -h。磁盘写满这个最隐蔽,因为 SSH 登录本身也需要写临时文件,盘满了直接登不进去。

至于"卡"和"慢",我遇到的原因集中在三个:带宽打满(vnstat 一看便知)、内存不足触发 swap 频繁换页(vmstat 1看 si/so 两列)、以及被扫描器持续爆破导致 CPU 被占(lastb或 fail2ban 日志能看到)。

5.2 免费到期与欠费的连锁反应

这条链路值得单独说,因为它的每一步都不明显。

试用到期 → 系统不停机,转为按量计费 → 余额开始被扣 → 余额扣完 → 进入欠费状态 → 资源保留几天后被释放 → 数据丢失。

问题在于中间几步是静默的。余额充足的时候你收不到任何提醒,等收到"余额不足"的短信时,往往已经扣了一部分,而且服务可能已经因为欠费被限制。更麻烦的是,如果账号绑定了支付方式并且开了自动扣款,欠费会被直接补上,你可能过很久才发现账单。

应对方式:一是第 4.3 节的预算告警,二是到期日提前写进日历,三是不要在这类机器上放唯一一份数据。第三条是底线,我见过有人把毕业设计的代码只放在免费机器上,到期释放后找不回来,只能重写。

5.3 常见问题速查表

把上面这些整理成一张表,出问题的时候可以直接对:

现象最可能的原因处理方式
SSH 连接超时安全组未放行 / 系统防火墙拦截检查两层防火墙的端口规则
SSH 能连但极慢内存不足、swap 频繁、磁盘满VNC 登录后看 free、vmstat、df
服务莫名被杀1G 内存触发 OOM Killer加 swap、换轻量运行时、查 dmesg
磁盘突然满了日志、Docker 镜像、快照缓存journalctl 清理、docker system prune
账单出现小额扣费快照、流量超包、弹性 IP 闲置查账单明细逐项定位
到期后数据没了资源已释放,超过保留期无法恢复,只能靠提前备份
网站能开但图片慢带宽打满(1M 约 128KB/s)压缩图片、上 CDN、减少并发
登录提示权限拒绝密钥权限过宽 / 用户名不对chmod 600 私钥、确认用户名

6. 我自己的几点实操心得

用了几年免费额度,有几条经验是文档里不会写的,但确实管用。

第一条,把免费机器当"一次性"的用,别当"长期"的用。所有需要长期存活的东西——代码仓库、数据库、重要文档——都放本地或者有备份的地方,机器上只放可以随时重建的运行环境。这个心态建立起来之后,到期、释放、迁移都不会让你慌。

第二条,开通当天就把该关的关掉、该开的开上。自动续费关掉、预算告警开上、账单通知开上、密钥登录配好。这四件事加起来不超过二十分钟,但能挡掉后面百分之八十的麻烦。我现在的习惯是开完机器先不装环境,先把这四件事做完。

第三条,定期登录看一眼。长期免费的资源通常有活跃度要求,几个月不登录可能被回收。我给自己设了个每月一次的提醒,登进去跑一次更新、看一次账单、确认一次服务状态,五分钟的事。

第四条,记录比记忆可靠。每台机器建一个简单的文本档,写着 IP、端口、用途、到期日、装了什么。我现在有四台不同厂商的免费机器,全靠这个文档管着,不然早就搞混了。这个习惯是踩过一次"到底是哪台机器跑的定时任务"的坑之后养成的,那次排查花了整整一个下午。

最后分享一个小技巧:如果只是想要一台长期在线的轻量机器跑点小脚本,与其反复薅试用额度,不如认真找一找有没有长期免费的入门规格。这类资源虽然配置低,但不用操心到期,稳定性反而更好。我自己那台跑了两年多的监控脚本,就是 1核1G 的长期免费实例,从来没出过问题——前提是 swap 加好、日志控住、别往上堆重活。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进