VPS 开通后没几天,我干的第一件正经事不是装服务,而是把登录方式从密码换成密钥。密码这件事,输一次要防一次键盘记录器,防一次暴力破解;而一把 256 位的 ed25519 私钥,从数学上就不给对面包机会。
密钥比密码强在哪
密码登录的本质是「向对方证明我知道一个秘密」,于是这个秘密每次都要送过去(哪怕加密了)。密钥登录的本质是「向对方证明我持有一把钥匙」,验证过程只传签名不传钥匙本身。秘密永远不离开本机,这就是非对称加密最优雅的地方。
换完密钥顺手做了三件事:
PasswordAuthentication no,把密码这条路彻底焊死- SSH 端口挪走,不为安全,只为日志清爽——每天少几千行扫描噪音
- 私钥只在本地,服务器上只留公钥,
authorized_keys一行一把,随时可撤销
Deploy Key:给每段关系发专属钥匙
后来服务多了, GitHub 上的仓库也多了,我遇到一个具体问题:同一把 SSH key 不能在 GitHub 上绑两个仓库。一开始觉得是限制,后来发现是设计——
GitHub 的 deploy key 就是「一把钥匙只开一扇门」:每个仓库单独生成密钥对,公钥放进那个仓库的 Settings,私钥只放在需要拉代码的机器上。博客仓库一把、学术主页一把,互不相干。哪台机器丢了,去对应仓库把那把 key 删掉就行,其他仓库毫发无损。
比「一把万能钥匙走天下」多花了两分钟,换来的是爆炸半径的控制。信任应该被切分,而不是被复用。
隧道:让内网机器借道出门
密钥还解锁了一个玩法。实验室的服务器在内网,出不了公网,但我想在校外访问它的 RStudio。办法是 SSH 反向隧道:内网机器主动向 VPS 发起连接,在 VPS 上开一个端口,把流量转发回内网。
ssh -R 10023:localhost:8787 vps
之后访问 vps:10023,流量经加密隧道直达内网的 RStudio。VPS 在这里不存任何数据,只当一面「会转发的墙」——校园数据全程不出隧道,符合只读约定的精神。
小结
密钥体系的迷人之处在于:信任可以像链条一样精确传递,每一环都能单独上锁、单独更换。密码时代「一个密码走天下」的懒,在密钥时代应该换成「每段关系一把钥匙」的洁癖。
反正生成一把 key 只要一秒钟。
最后更新:30 Aug 2026
