引言
拿到一台云服务器(阿里云 ECS、腾讯云 CVM、AWS EC2 等),第一件事就是登录上去。但很多人对「登录」这件事的理解停留在「输密码」层面——其实云服务器最常见的登录方式并不是密码,而是一对「钥匙」。这篇文章把登录云服务器的几种方式和背后的原理讲清楚。
一、登录的本质:验证「你是谁」
无论哪种登录方式,本质都是回答服务器的一个问题:
你怎么证明你是这个账号的主人?
证明方式通常有三种,也就是三种常见的「认证因子」:
- 你知道的东西(Something you know)—— 密码
- 你拥有的东西(Something you have)—— 私钥文件、硬件令牌、手机
- 你是什么(Something you are)—— 指纹、虹膜等生物特征
云服务器登录主要用前两种:密码和密钥对。
二、方式一:密码登录
用法
ssh root@服务器IP
# 然后输入密码
原理
密码登录是最直观的方式。流程如下:
- 客户端发起 SSH 连接,先协商加密算法、交换密钥,建立一条加密通道(这一步是 SSH 传输层协议,任何认证方式都要先经过它);
- 服务器向客户端索要密码;
- 客户端把密码通过加密通道发送过去(明文密码不会被网络抓包看到,因为它已经被通道加密了);
- 服务器拿到密码后,与
/etc/shadow里存储的密码哈希比对; - 一致则通过,不一致则拒绝。
优缺点
- ✅ 简单直观,适合临时登录、紧急排查;
- ❌ 容易被暴力破解(撞库、字典攻击),云服务器公网 IP 天天都在被扫描,root 密码若设得太弱,几分钟就可能被攻破;
- ❌ 密码需要记忆/管理,多台服务器密码各不同很痛苦。
所以生产环境的云服务器,默认通常关闭密码登录,只保留密钥对登录。
三、方式二:密钥对登录(重点)
这是云服务器默认且推荐的登录方式,也是本文的重头戏。
用法
ssh -i 私钥文件.pem root@服务器IP
原理:非对称加密
密钥对登录的底层是非对称加密(也叫公钥密码学)。
密钥对由一对「数学上相关、但不能互相推导」的钥匙组成:
| 私钥(Private Key) | 公钥(Public Key) | |
|---|---|---|
| 保存位置 | 只有你自己有(本地电脑) | 放在服务器上 |
| 作用 | 用于签名 / 解密 | 用于验签 / 加密 |
| 能否公开 | ❌ 绝对不能 | ✅ 可以随便公开 |
核心特征:
- 用公钥加密的内容,只有私钥能解开;
- 用私钥签名的内容,任何人都能用公钥验证真伪。
关键点在于:私钥永远不离开你的电脑。登录时,私钥不会上传到服务器,服务器只是用你提前放上去的公钥来「验证」你是不是真的持有对应的私钥。
登录握手流程(一步步拆解)
假设你已经把公钥放到了服务器的 ~/.ssh/authorized_keys 文件里,现在要登录:
第 0 步:准备阶段(一次性)
ssh-keygen -t ed25519
# 把公钥(.pub 文件)内容追加到服务器 ~/.ssh/authorized_keys
第 1 步:客户端发起认证请求
客户端告诉服务器:「我是 root,想用公钥认证,我的公钥是 XXXXX」。
第 2 步:服务器核对公钥
服务器查看这个公钥是否在 root 的 authorized_keys 里。不在 → 直接拒绝;在 → 继续。
第 3 步:服务器发出「挑战」(Challenge)
服务器生成一段随机数据(challenge),发给客户端,说:「既然你说你有私钥,那就用私钥给这段数据签个名证明一下」。
第 4 步:客户端用私钥签名
客户端用本地私钥对这段 challenge 进行签名,把签名结果发回服务器。
第 5 步:服务器用公钥验签
服务器用之前存的公钥验证签名:
- 验签通过 → 证明客户端确实持有对应私钥 → 认证成功,允许登录;
- 验签失败 → 拒绝。
为什么这种方式安全?
想象一个类比:
服务器是一把锁,公钥是挂在门上的锁,私钥是唯一能开这把锁的钥匙。
登录时,服务器不是检查你「是不是带了对的钥匙」,而是说:「你如果能打开这把锁,就证明你带着对的钥匙」。你拿出私钥「开锁」证明自己,但钥匙从头到尾没有递出去过。
安全性体现在三点:
- 私钥不出门:整个登录过程私钥只在你本地参与签名,从不发送到网络,攻击者抓包也拿不到私钥;
- 公钥泄露无害:即使公钥被偷,也只能验签,无法冒充你登录;
- 无法暴力破解:挑战是随机数,且密钥长度(如 2048/3072 位 RSA、256 位 Ed25519)远超暴力穷举能力。
补充:为什么「challenge 用公钥加密」这种说法不准确?
有些文章会简化成「服务器用公钥加密一个随机数发给你,你用私钥解密」。这个描述不准确。
实际上 SSH 公钥认证用的是签名验签,而不是「加密/解密」:
- 服务器发的是明文 challenge(不需要保密);
- 客户端用私钥对它签名;
- 服务器用公钥验签。
加密和解密是另一回事(比如 HTTPS 里用公钥加密会话密钥)。SSH 认证靠的是签名,别混为一谈。
四、其他登录方式(补充)
除了上面两种,云服务器还有几个入口:
1. Web 控制台 / VNC
云厂商控制台里的「远程连接」,本质是浏览器内嵌的网页终端或 VNC,不依赖网络上的 SSH 服务。
- ✅ 好处:即使你把 SSH 端口配错、防火墙封死、甚至误删了密钥,还能通过控制台「救急」进去修复;
- ❌ 坏处:只能手动操作,无法自动化、无法传文件、不适合批量管理。
2. 云厂商的「实例管理」Agent
部分厂商提供内置命令通道(如阿里云的云助手、AWS 的 SSM),能绕过 SSH 直接下发命令。适合自动化运维,但属于「另一套体系」,不在本文展开。
五、对比总结
| 维度 | 密码登录 | 密钥对登录 |
|---|---|---|
| 凭据 | 记在脑子里 | 存在私钥文件里 |
| 暴力破解风险 | 高(可穷举) | 极低(密钥极长 + 随机挑战) |
| 私钥是否上网 | — | 否,永远不出本机 |
| 多服务器管理 | 每台要记不同密码 | 一把私钥可配多台 |
| 丢失/泄露后果 | 改密码即可 | 需更换密钥对 |
| 云厂商默认 | 通常关闭 | 默认推荐 |
六、最佳实践建议
- 关闭密码登录:在
/etc/ssh/sshd_config里设PasswordAuthentication no,只留密钥登录; - 别用 root 直接登录:新建普通用户登录,需要时再
sudo; - 保护好私钥:本地权限设为
chmod 600,永不提交到代码仓库; - 定期轮换密钥:尤其怀疑私钥泄露时,重新生成并替换
authorized_keys; - 优先用 Ed25519:比 RSA 更短、更快、安全性同等甚至更高(
ssh-keygen -t ed25519)。
结语
「登录云服务器」看似一句话的事,背后是一套严谨的密码学设计:先用对称加密建立安全通道,再用非对称加密完成身份认证。理解了「私钥签名、公钥验签、私钥不出门」这三点,你就真正理解了密钥对登录的安全根基。
