云服务器运维与项目部署
13.3 SSH连接配置
Tip
使用密码登录服务器非常危险 (暴力破解),而且麻烦。SSH Key 是一对钥匙:一把公钥 (锁) 挂在服务器上,一把私钥 (钥匙) 放在你电脑里。只有配对成功才能开门。
1. 为什么要学这个?
你每登录一次服务器,就要输一次复杂的密码 Xy9#kL2@mPq.
有时候输错了还得重来。
更可怕的是,如果你看一眼 /var/log/auth.log,你会发现每分钟都有来自全球各地的机器人 IP 尝试猜测你的密码。
一旦被猜中,你的服务器就成了别人的矿机。
2. 核心概念:SSH Key Pair
- Public Key (公钥):
.pub结尾。可以给任何人,放在服务器的~/.ssh/authorized_keys列表里。 - Private Key (私钥): 自己留着,打死不给别人。
原理:
- 服务器:我有把锁 (公钥),谁有钥匙?
- 你:我有 (用私钥加密一段信息发回去)。
- 服务器:(用公钥解密成功) 确实是你,请进。
3. 解决方案 (HOW)
3.1 生成密钥对 (本地电脑)
# 遇到提示一路回车即可
ssh-keygen -t ed25519 -C "your_email@example.com"
这会在 ~/.ssh/ 下生成 id_ed25519 (私钥) 和 id_ed25519.pub (公钥)。
3.2 把公钥上传到服务器
方法 A:一键上传 (推荐)
# 会自动把你的公钥追加到服务器的授权列表
ssh-copy-id root@1.2.3.4
方法 B:手动复制
- 本地:
cat ~/.ssh/id_ed25519.pub复制内容。 - 服务器:
echo "粘贴内容" >> ~/.ssh/authorized_keys。
3.3 禁用密码登录 (关键步骤)
确保你能免密登录后,编辑服务器上的 /etc/ssh/sshd_config:
PasswordAuthentication no # 关键!关掉密码登录
PubkeyAuthentication yes
重启 SSH:service ssh restart。
3.4 SSH 握手流程图
graph TD
Client["你的电脑"] -->|"Step 1: 发起连接 (携带公钥指纹)"| Server["SSH 服务器"]
Server --"Step 2: 找到公钥, 发送随机数"--> Client
Client -->|"Step 3: 用私钥加密随机数"| Server
Server --"Step 4: 用公钥解密验证"--> Result{"验证成功?"}
Result -- Yes --> Login["登录成功 (无需密码)"]
Result -- No --> Reject["拒绝连接"]
style Login fill:#c8e6c9,stroke:#2e7d32
style Reject fill:#ffcdd2,stroke:#c62828
4. 避坑指南
| ❌ 不要这样做 | ✅ 应该这样做 | 为什么 |
|---|---|---|
| 使用 RSA | 使用 Ed25519 | RSA 算法比较老,密钥很长。Ed25519 更安全、更短、更快。 |
| 私钥裸奔 | 设置 Passphrase | 生成 Key 时应该设置密码。这样即使你的笔记本被黑客控制了,没有密码他也无法使用私钥。 |
| 忘备份 | 备份 ~/.ssh | 如果你重装了电脑且忘了备份私钥,又禁用了服务器密码,那你就是把自己锁在门外了。只能去云控制台重置系统。 |
5. 真实案例
Story
2016年,GitHub 的钥匙门
很多开发者习惯把 ~/.ssh 文件夹备份到 GitHub 私有仓库,甚至误上传到公开仓库。
爬虫机器人 24 小时都在扫描 GitHub 上的 id_rsa。
一旦发现,几秒钟内无论你藏得多深的服务器都会被攻陷,并被植入挖矿木马。
Vibe 心法:私钥是你的数字底裤,永远不要将其展示在任何仓库或社交平台。禁用密码登录并非为了优雅,而是为了在 24 小时不断歇的暴力破解脚本面前,为服务器锁上一道无法被“猜中”的防盗门。
6. 本章小结
- 免密:不是为了偷懒,是为了安全。
- 禁用:配置好 Key 后,必须第一时间关掉 Password Authentication。
- 保管:私钥丢了约等于服务器丢了。