Vibe Tutorial
Git 版本控制与跨平台协作

10.3 SSH详解

Tip

真正的通行证,不是你说了什么(密码),而是你是谁(指纹)。


1. 为什么要学这个?

2021 年 8 月 13 日,GitHub 正式废除了账号密码验证。 这意味着:你再也无法通过输入账号密码来推送代码了。 如果你还在用 HTTPS,每次 git push 它都会让你输入一个像天书一样的 PAT (Personal Access Token),极其反人类。

SSH 是你的救星。它是数字世界的"人脸识别"。配置一次,终身免密。


2. 核心概念:非对称加密 (钥匙与锁)

并没有什么黑魔法,SSH 依靠的是一对文件:

  1. 私钥 (Private Key)id_ed25519
    • 就是你的钥匙
    • 存在你的电脑里,打死也不能给别人看
  2. 公钥 (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

  1. 复制锁的内容
    • Windows: type %userprofile%\.ssh\id_ed25519.pub
    • Mac/Linux: cat ~/.ssh/id_ed25519.pub
  2. 登录 GitHub -> Settings -> SSH and GPG keys
  3. 点击 New SSH key
  4. 标题随便填 (比如 "MacBook Air"),把那一串 ssh-ed25519 开头的乱码粘贴进去。
  5. 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_rsaid_ed25519 文件,它们会立刻下载。 如果你的这把钥匙同时也配了云服务器(AWS/阿里云),几秒钟内,你的服务器就会被植入挖矿木马。

Vibe 心法: 私钥就是数字世界的"核按钮"。它永远只应该呆在 ~/.ssh 目录里,不要复制,不要截图,更不要上传。


5. 本章小结

  1. 用 Ed25519:新时代的算法,短小精悍。
  2. 公钥对外.pub 结尾的文件可以贴满大街。
  3. 私钥对内:没有后缀的文件是你的命根子,锁在本地。