Git 版本控制与跨平台协作
10.3 SSH详解
Tip
真正的通行证,不是你说了什么(密码),而是你是谁(指纹)。
1. 为什么要学这个?
2021 年 8 月 13 日,GitHub 正式废除了账号密码验证。
这意味着:你再也无法通过输入账号密码来推送代码了。
如果你还在用 HTTPS,每次 git push 它都会让你输入一个像天书一样的 PAT (Personal Access Token),极其反人类。
SSH 是你的救星。它是数字世界的"人脸识别"。配置一次,终身免密。
2. 核心概念:非对称加密 (钥匙与锁)
并没有什么黑魔法,SSH 依靠的是一对文件:
- 私钥 (Private Key):
id_ed25519- 就是你的钥匙。
- 存在你的电脑里,打死也不能给别人看。
- 公钥 (Public Key):
id_ed25519.pub- 就是你的锁。
- 你可以把这个锁随意复制,贴在 GitHub 上,贴在 Gitee 上,贴在腾讯云上。
原理:GitHub 拿着你的锁(公钥),向你发挑战。你的电脑用钥匙(私钥)解开了,门就开了。
3. 解决方案 (HOW)
第一步:生成密钥对 (使用 Ed25519 算法)
别再用老旧的 RSA 算法了,Ed25519 更快更短更安全。 在终端执行:
# -C 后面是你的邮箱,方便标记钥匙是谁的
ssh-keygen -t ed25519 -C "your_email@example.com"
遇到提问,一路回车到底! (除非你是安全偏执狂,否则不要给 Key 设密码,那既然是为了免密,何苦为难自己?)
第二步:把公钥给 GitHub
- 复制锁的内容:
- Windows:
type %userprofile%\.ssh\id_ed25519.pub - Mac/Linux:
cat ~/.ssh/id_ed25519.pub
- Windows:
- 登录 GitHub -> Settings -> SSH and GPG keys。
- 点击 New SSH key。
- 标题随便填 (比如 "MacBook Air"),把那一串
ssh-ed25519开头的乱码粘贴进去。 - Save。
第三步:验证
ssh -T git@github.com
如果看到 Hi <username>! You've successfully authenticated,恭喜你,通了。
认证流程图
graph TD
User["本地电脑 (持有私钥)"] --"1. 申请连接"--> Server["GitHub (持有公钥)"]
Server --"2. 发送加密挑战"--> User
User --"3. 用私钥解密并回传"--> Server
Server --"4. 验证成功?"--> Access{允许 Access}
Access -- Yes --> Success["✅ git push 成功"]
Access -- No --> Fail["❌ Permission denied"]
style User fill:#e1bee7
style Server fill:#bbdefb
4. 真实案例
Story
"我把私钥提交上去了"
很多新手在备份文件时,一不小心把 ~/.ssh 目录拖进了项目里,然后 git push。
灾难性后果:
全世界的爬虫都在 24 小时监控 GitHub 的公开流。
一旦发现 id_rsa 或 id_ed25519 文件,它们会立刻下载。
如果你的这把钥匙同时也配了云服务器(AWS/阿里云),几秒钟内,你的服务器就会被植入挖矿木马。
Vibe 心法:
私钥就是数字世界的"核按钮"。它永远只应该呆在 ~/.ssh 目录里,不要复制,不要截图,更不要上传。
5. 本章小结
- 用 Ed25519:新时代的算法,短小精悍。
- 公钥对外:
.pub结尾的文件可以贴满大街。 - 私钥对内:没有后缀的文件是你的命根子,锁在本地。