SSH Key 使用总结:更安全、更高效的 Git 认证方式

2025-05-29

在日常的 Git 使用中,我们经常需要连接 GitHub、GitLab 等代码托管平台进行 clonepushpull 等操作。默认使用 HTTPS 访问时,每次操作都可能需要输入用户名和密码,尤其在 GitHub 上密码已被废弃,需要使用 Token,既不安全也不方便。

本文将系统介绍 SSH Key 的作用、优势、使用场景及配置方法,帮助你高效、安全地使用 Git。


🔐 什么是 SSH Key?

SSH Key 是一种基于 非对称加密 的认证方式,由一对密钥组成:

  • 公钥(public key):可公开,添加到服务器或平台(如 GitHub)

  • 私钥(private key):保存在本地,不能泄露,用来证明你的身份

SSH Key 是 SSH 协议下的核心认证机制,可用于远程登录服务器、Git 操作等。


🧠 为什么使用 SSH Key?

优势

说明

✅ 更安全

使用非对称加密,避免 Token 或密码泄露风险

✅ 更方便

配置后无需每次输入用户名和密码

✅ 多账户支持

可以为不同平台或项目配置不同密钥

✅ 自动化友好

适合部署脚本、CI/CD,无需交互式输入

✅ GitHub、GitLab 等全面支持

是官方推荐的认证方式


🛠️ SSH Key 的生成与配置

1. 生成 SSH Key

ssh-keygen -t ed25519 -C "your_email@example.com"
  • -t ed25519:使用 Ed25519 算法,现代、安全、效率高

  • -C:添加注释(通常用邮箱,方便识别)

  • 然后会提示输入保存路径和密码(passphrase),可按需输入或直接回车跳过

2. 查看公钥并复制

cat ~/.ssh/id_ed25519.pub

复制整行内容,准备添加到平台。

3. 添加公钥到 GitHub / GitLab

点击 "New SSH key",粘贴刚复制的公钥,保存即可。


✅ 测试是否配置成功

ssh -T git@github.com

第一次连接会询问是否信任,输入 yes 后,看到如下提示表示成功:

Hi username! You've successfully authenticated, but GitHub does not provide shell access.

🌐 使用 SSH 协议访问仓库

默认 git clone 通常是 HTTPS 格式,例如:

git clone https://github.com/yourname/yourrepo.git

此时仍会要求用户名 + Token。

改为 SSH 格式即可使用密钥认证:

git clone git@github.com:yourname/yourrepo.git

如果已经克隆了项目,可使用以下命令修改远程地址:

git remote set-url origin git@github.com:yourname/yourrepo.git

🧩 进阶:多个账号的 SSH 配置(可选)

如果你有多个 GitHub/GitLab 账号,可以在 ~/.ssh/config 中添加如下配置:

Host github-work
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_work

Host github-personal
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_personal

然后使用自定义 Host 进行操作:

git clone git@github-work:yourname/yourrepo.git

🔐 关于密钥密码(passphrase)

生成密钥时可以选择设置一个密码,进一步保护私钥的安全性。

  • 优点:即使私钥被窃取,别人也无法使用

  • 缺点:每次使用都要输入密码

  • 可使用 ssh-agent 缓存私钥,避免重复输入:

eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519

📌 总结

SSH Key 是现代开发流程中必不可少的认证方式,具备以下优点:

  • ✅ 安全:非对称加密,防止泄露

  • ✅ 高效:免输密码,适合自动化

  • ✅ 灵活:支持多账号和平台

建议你在所有代码托管平台上统一使用 SSH Key,并管理好本地私钥的权限。


如果你还没有使用 SSH Key,是时候切换了!

如需配置脚本或 .ssh/config 示例,也欢迎随时留言交流。

PREV
Linux 修改文件权限方法总结
NEXT
Docker Compose 中 -p(项目名)参数详解及其对资源管理的影响