如何生成 SSH 密钥并配置到 GitHub 或 Gitee?

2025-12-31 09:23:00
Git基础入门
原创
32
摘要:为什么你应该使用 SSH 密钥?

在我们动手之前,先花30秒搞清楚为什么要这么做。

简单来说,SSH 密钥提供了一种更安全、更便捷的连接方式。它由一对密钥组成:

  • 私钥 (Private Key):存放在你的电脑上,绝对不能泄露给任何人。它就像你的银行卡密码。
  • 公钥 (Public Key):可以放心地告诉任何人,配置在像 GitHub/Gitee 这样的平台上。它就像你的银行卡号。

当你通过 SSH 连接时,远程服务器(比如 GitHub)会用你的公钥加密一段信息,然后发给你的电脑。只有你本地的私钥才能解开它。一旦解密成功,服务器就知道“哦,这个人是可信的”,于是就允许你进行操作,全程无需密码。

核心优势就两点:

  1. 安全: 比密码验证安全得多,几乎不可能被暴力破解。
  2. 方便: 一次配置,永久有效,告别重复输入密码。

核心三步走:生成、复制、配置

整个过程可以清晰地分为三个步骤,适用于所有主流操作系统(Windows/macOS/Linux),因为我们使用的都是 Git Bash 或终端里的通用命令。

第一步:生成你的 SSH 密钥对

首先,打开你的终端。

  • Windows 用户: 打开 Git Bash (安装 Git 时会自动安装)。
  • macOS / Linux 用户: 打开“终端” (Terminal)。

在终端里输入以下命令,然后敲回车。

ssh-keygen -t ed25519 -C "your_email@example.com"

提示:

  • -t ed25519 是指定密钥的加密算法。Ed25519 是目前最推荐的算法,比传统的 RSA 更安全、性能更好。
  • -C "your_email@example.com" 是给这个密钥加一个注释,通常用你的邮箱地址,方便识别。记得换成你自己的邮箱。

执行命令后,你会看到几行提示:

> Generating public/private ed25519 key pair.
> Enter file in which to save the key (/c/Users/YourName/.ssh/id_ed25519):

这里是问你密钥文件保存在哪里。 直接按回车键使用默认路径就好,不要修改。

接着,它会提示你输入一个密码(passphrase):

> Enter passphrase (empty for no passphrase):
> Enter same passphrase again:

这个密码是用来保护你的私钥文件的。如果设置了,每次使用这个密钥时都需要输入它。为了方便, 你可以直接按两次回车键,表示不设置密码。

如果一切顺利,你会看到这样的成功信息,代表你的密钥对已经生成好了。

Your identification has been saved in /c/Users/YourName/.ssh/id_ed25519.
Your public key has been saved in /c/Users/YourName/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx your_email@example.com
The key's randomart image is:
+--[ED25519 256]--+
|        .        |
|       + .       |
|      . B .      |
|     . * +       |
|    . = S .      |
|   . = = o .     |
|  . . B o.o .    |
|   . . +E=.o     |
|    .o.o=o+.     |
+----[SHA256]-----+

好了,密钥已经躺在你的电脑里了。

第二步:找到并复制你的公钥

密钥生成后,我们需要拿到 公钥(.pub 后缀的文件)的内容。

在终端里输入以下命令,它会直接把公钥内容打印在屏幕上:

cat ~/.ssh/id_ed25519.pub

你会看到一长串以 ssh-ed25519 开头、以你的邮箱结尾的字符。这就是你的公钥。

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEvTj/qY1bY8Sg8gzaR0R0R0R0R0R0R0R0R0R0R0R0 your_email@example.com

完整地选中并复制这一整串内容。

⚠️ 重要警告: 千万不要搞错了文件!id_ed25519 是私钥,id_ed25519.pub 才是公钥。泄露私钥等于把你的电脑权限交给了别人。

第三步:将公钥添加到 GitHub 或 Gitee

现在,我们只差最后一步了。

配置到 GitHub

  1. 登录你的 GitHub 账户。
  2. 点击右上角的头像,选择  Settings
  3. 在左侧菜单栏,找到并点击  SSH and GPG keys
  4. 点击右上角的绿色按钮  New SSH key
  5. 在  Title 栏里,给这个密钥起一个你能记住的名字,比如 My MacBook Pro 或 Work PC。
  6. 在  Key 文本框里, 粘贴你刚刚复制的公钥内容。
  7. 点击  Add SSH key

<!-- Placeholder for a visual guide -->

配置到 Gitee (码云)

流程几乎一模一样:

  1. 登录你的 Gitee 账户。
  2. 点击右上角的头像,选择  设置
  3. 在左侧菜单栏,找到并点击  SSH公钥
  4. 在  标题 栏里,同样起一个好记的名字。
  5. 在  公钥 文本框里, 粘贴你的公钥内容。
  6. 点击  确定

<!-- Placeholder for a visual guide -->

最后一步:验证配置是否成功

为了确保一切正常工作,我们来做一个简单的连接测试。

测试 GitHub 连接

在终端输入:

ssh -T git@github.com

第一次连接时,你可能会看到一个警告,问你是否信任这个主机: Are you sure you want to continue connecting (yes/no/[fingerprint])? 输入 yes 然后回车。

如果配置成功,你会看到这样的欢迎信息: Hi YourUsername! You've successfully authenticated, but GitHub does not provide shell access. 看到 successfully authenticated 就说明大功告成!

测试 Gitee 连接

在终端输入:

ssh -T git@gitee.com

同样,输入 yes 并回车。成功后会看到: Hi YourUsername! You've successfully authenticated, but Gitee.com does not provide shell access.

现在,当你再使用 git clone, git pull, git push 等命令操作 git@github.com:... 或 git@gitee.com:... 格式的仓库地址时,就再也不需要输入密码了。

FAQ:关于 SSH 密钥的常见疑问

Q1: Ed25519 和 RSA 我该用哪个?

首选 Ed25519。 它是更现代、更安全的算法。除非你需要兼容非常古老的系统,否则没有理由不使用它。

特性 Ed25519 RSA
安全性 更高 相对较低 (需要更长的密钥)
性能 更快 较慢
密钥长度 更短 更长
兼容性 现代系统 几乎所有系统

Q2: 我可以为多个 GitHub/Gitee 账户配置不同的 SSH 密钥吗?

完全可以。 这是一个常见的进阶需求(比如公司一个账户,自己一个账户)。你需要:

  1. 生成不同名称的密钥对,例如 ssh-keygen -t ed25519 -C "work@email.com" -f ~/.ssh/id_ed25519_work。
  2. 在 ~/.ssh/ 目录下创建一个名为 config 的文件。
  3. 在 config 文件中为不同的主机配置使用不同的密钥文件。

Q3: 出现 "Permission denied (publickey)" 错误怎么办?

这是最常见的错误,通常有几个原因:

  • 公钥没配对: 检查你添加到 GitHub/Gitee 的公钥内容是否和你本地 ~/.ssh/id_ed25519.pub 文件里的完全一致,有没有多余的空格或换行。
  • 私钥权限问题: 在 macOS/Linux 下,确保 ~/.ssh 目录和私钥文件的权限正确。通常私钥文件权限应为 600。
  • 使用了错误的仓库地址: 确保你 clone 或 push 的是 SSH 格式的地址 (git@...),而不是 HTTPS 格式的 (https://...)。

Q4: 私钥 (id_ed25519) 和公钥 (id_ed25519.pub) 有什么区别?哪个能给别人?

再次强调:

  • 公钥 (.pub 文件) 是公开的,可以安全地分享和配置到任何服务器上。
  • 私钥 (没有后缀的文件) 是你的身份凭证, 绝对、绝对、绝对不能泄露给任何人或上传到任何地方。
发表评论
评论通过审核后显示。