换完手机,GitHub 把我挡在了门外
换完手机那天,GitHub 把我挡在了门外。
那天我坐在电脑前,屏幕上弹出来的还是那行熟悉的提示——请输入两步验证代码。我掏出手机打开验证器,列表是空的,一条都没有。换机之前我以为它会跟着微软账号一起同步回来,结果并没有。中间到底卡在哪一步断的,我到现在也说不清。
先翻恢复码,没存;翻邮箱,没有;翻笔记,还是没有。最后只能走申诉:填表、等回复、再补材料,一个账号折腾了好几天才算有个说法。
那几天我一直在想一件事:我的密码一个都没丢,锁是我自己加的,可钥匙不知道被我放哪儿去了。
那些验证器,本来也没打算让你把数据拿走
先说清楚,把验证码放在手机上没有任何问题。Microsoft Authenticator 我用了很多年,平时很顺手,它也确实尽职。
问题是,一直到出事那天我才发现,我从来没搞清楚过几件事:我的数据存在哪里、上一次同步是什么时候成功的、以及万一要用的时候,我能不能把它拿出来。
- Google Authenticator:同步要连 Google 的服务。在国内能不能连上、什么时候能连上,基本看运气。它可以把账号扫码迁到另一个 App,但不会给你一份能自己保管的备份文件。
- Microsoft Authenticator:备份锁在微软账号里,跨系统恢复限制不少——在安卓上备份的,往 iPhone 上恢复往往就不行。我这次就是栽在这儿:换完机打开,一条都没有。
- Authy:注册要手机号,数据在它自己的云上。想手动导出一份,它不给这个选项。
- 把 2FA 顺手塞进密码管理器(1Password、Bitwarden 之类):确实方便,但等于把密码和验证码放进同一个篮子。篮子漏了一次,二次验证也就白开了——它的全部意义本来就在于"再多一道锁"。
绕一圈你会发现,这些方案都在回答同一个问题:"我的验证码存在谁那儿?" 而答案基本都是"存我这儿就行,你不用管"。
我想要的东西其实很朴素
列出来就五条:
- 数据存在本地,最好能用上系统的加密存储;
- 能备份到我本来就有的地方——坚果云、自己的 NAS、对象存储,这些我早就在用了,不想再为它单独开个账号;
- 备份必须是加密的,网盘服务商拿到也看不懂;
- 兼容标准,能从别家导进来,也能导出去,别再添一个孤岛;
- 换手机的时候,别再让我把几十个账号一个个重新扫一遍。
按这几条筛,能同时满足的其实不多:有些方案得自己搭服务、平时开着浏览器用,而我想要的只是在手机上点一下。
后来我用的是 EasyAuth。
EasyAuth 是什么
一句话:一个开源的 2FA 验证器 App,本地存储、离线可用,并且支持把数据加密备份到你自己的 WebDAV 或 S3 存储。
它是 Flutter 写的,Apache 2.0 协议完全开源,代码公开可审计,没有账号体系、没有遥测、没有广告,也不需要 Google 服务框架。
目前能直接下载安装的是 Android 版 APK(GitHub / Gitee 上都有)。iOS、Windows、Linux 还没有预编译版本,源码是公开的,可以自己编译。
算法上是 TOTP(RFC 6238)和 HOTP(RFC 4226)两种标准,兼容 Google Authenticator 那套 otpauth:// 协议和迁移二维码——意味着它能跟别家互相搬家,不是又一个只能进不能出的孤岛。

界面很朴素:顶上一行搜索框,下面是口令卡片,每张卡片三行——口令名、发行方、当前六位数字,右边一圈倒计时。没有花活,也没有让我盯着看的动画。
它把备份这件事做对了
如果只让我说一个推荐理由,就是备份。
备份存哪儿,你说了算
支持两类:
- WebDAV:坚果云、Nextcloud,以及群晖、威联通这些自建 NAS 基本都自带;
- S3 兼容:AWS S3、阿里云 OSS、腾讯云 COS、七牛云、MinIO、Cloudflare R2 这类对象存储。

关键在于"你自己的"这四个字:填的是你自己服务器的地址、你自己的密钥,备份文件进的是你自己的空间。哪天不想用了,文件也还在你自己的空间里,不会因为某个服务关停就跟着消失。
备份本身是加密的
备份文件用 AES-256-GCM 加密,密钥由你设置的备份密码经 PBKDF2-HMAC-SHA256 迭代 60 万次派生。换句话说,你的网盘账号就算被别人拿到了,他下载走那个 zip 也只是一堆乱码。
多版本可回退
备份文件名带时间戳,形如 backup_20260527_120413.zip,默认在远端保留最近 10 份,超出的自动清理。也可以在 App 里直接看到远端有哪些备份、手动删掉不要的,不用专门登录服务器去收拾。

恢复不会手滑
恢复是覆盖式的,所以它一定会先弹一次确认。密码错了、或者备份文件损坏,它会直接报错,不会动你已经存在的数据。这个细节挺重要——恢复本来就是出事的时候才会做的事,那个时刻最不该再出岔子。
说在后面
2FA 的意义本来就是把钥匙多放一把在自己手里。既然如此,这把钥匙最好真的在自己手里。
对了,还得交代一句:EasyAuth 是我自己写的,起因就是开头那件事。它完全开源,用得上的话自取:
- 官网:https://easyauth.easydebug.net/
- GitHub 仓库:https://github.com/EasyDebug-NET/EasyAuth
- GitHub 下载:https://github.com/EasyDebug-NET/EasyAuth/releases/latest
- Gitee 仓库:https://gitee.com/EasyDebug-NET/EasyAuth
- Gitee 下载:https://gitee.com/EasyDebug-NET/EasyAuth/releases/latest
有问题欢迎在仓库里提 Issue。
