-
Notifications
You must be signed in to change notification settings - Fork 2
GPG Key 完全配置指南
答:想象一下,你在 GitHub 上提交(commit)代码,就像是寄出了一封信。默认情况下,这封信上只写了你的名字(git config里的 user.name 和 user.email)。但任何人都可以冒充你的名字去“寄信”。
而 GPG (GNU Privacy Guard) 就像是你的个人“数字签名+印章”。当你用 GPG Key 签名你的提交后,GitHub 就能验证这个提交确实是你本人发出的,而不是别人冒充的。验证通过后,你的提交旁边会出现一个绿色的 "Verified" 徽章,如下图所示:
这大大增加了你代码仓库的安全性和可信度。
在开始之前,请确保你的电脑上已经安装了 Git。
我们将整个过程分为以下几大步:
- 安装 GPG 工具
- 生成你的 GPG 密钥对
- 将 GPG 公钥添加到 GitHub
- 配置 Git 使用 GPG 签名
- 进行一次签名提交并验证
你需要先在你的电脑上安装 GPG 命令行工具。
-
Windows 系统:
- 访问 Gpg4win 官网。
- 下载并安装最新版本。安装过程中保持默认选项即可。安装完成后,它会自动将 GPG 工具添加到系统环境中。
- 打开一个新的
Git Bash终端(推荐使用 Git Bash,而不是 CMD 或 PowerShell)来执行后续命令。
-
macOS 系统:
-
最简单的方式是使用 Homebrew。如果你没有安装 Homebrew,请先访问官网安装。
-
打开“终端” (Terminal) 应用,运行以下命令:
brew install gnupg
-
-
Linux 系统 (Debian/Ubuntu):
-
GPG 通常是预装的。你可以通过运行
gpg --version来检查。 -
如果未安装,打开终端,运行以下命令:
sudo apt-get update sudo apt-get install gnupg
-
现在,我们要创建属于你的独一无二的密钥对(一个私钥,一个公钥)。
-
打开你的终端 (Git Bash / Terminal)。
-
运行以下命令来开始生成过程:
gpg --full-generate-key
-
接下来,程序会问你几个问题,请依次回答:
-
Please select what kind of key you want: (请选择您想要的密钥类型)
(1) RSA and RSA (default) ... Your selection?直接按
回车,使用默认的(1) RSA and RSA即可。 -
What keysize do you want? (您需要多长的密钥?)
RSA keys may be between 1024 and 4096 bits long. What keysize do you want? (3072)输入
4096然后按回车。这是目前最推荐的强度,非常安全。 -
Please specify how long the key should be valid. (请指定密钥的有效期限)
0 = key does not expire <n> = key expires in n days <n>w = key expires in n weeks <n>m = key expires in n months <n>y = key expires in n years Key is valid for? (0)为了安全,建议设置一个有效期,比如1年或2年。你可以输入
1y然后按回车。当然,为了省事,你也可以直接按回车选择永不过期(不推荐)。 -
Is this correct? (y/N) (确认信息是否正确?) 输入
y然后按回车。
-
-
接着,你需要输入你的个人信息:
-
Real name: 你的真实姓名或昵称 (例如:
Wang Xiaoming)。 - Email address: 【❗极其重要❗】 这里必须输入你在 GitHub 上已经验证过的邮箱地址!否则 GitHub 无法匹配你的签名。
- Comment: 备注,可以不填,直接回车。
输入完毕后,会显示一个确认信息,检查无误后输入
O(Okay) 然后按回车。 -
Real name: 你的真实姓名或昵称 (例如:
-
设置密码 (Passphrase) 此时,会弹出一个窗口或在命令行提示你输入一个密码。这个密码是用来保护你的私钥的,非常重要!
- 请设置一个强度高且你能记住的密码。
- 输入两次以确认。
- 这个密码在你每次使用 GPG 签名时(比如
git commit)都需要输入。
输入密码后,系统会开始生成密钥,可能会让你随机移动鼠标或敲击键盘来产生足够的“熵”(随机性)。请耐心等待片刻。
-
查看并获取你的 GPG Key ID 生成成功后,你需要找到你的 GPG Key ID。运行以下命令:
gpg --list-secret-keys --keyid-format=long
你会看到类似下面的输出:
/Users/hubot/.gnupg/pubring.kbx --------------------------------- sec rsa4096/3AA5C34371567BD2 2025-08-28 [SC] [expires: 2026-08-28] B2A8C24C270A9448C01B34253AA5C34371567BD2 uid [ultimate] Wang Xiaoming <[email protected]> ssb rsa4096/4BB6D45482678BE3 2025-08-28 [E] [expires: 2026-08-28]你需要的是
sec那一行斜杠/后面的那一长串字符,也就是你的 Key ID。在这个例子中,Key ID 就是
3AA5C34371567BD2。请复制你自己的 Key ID。
私钥你自己保管,公钥则要告诉 GitHub,这样它才能用公钥来验证你的签名。
-
运行以下命令,导出你的公钥。记得把
YOUR_KEY_ID换成你上一步复制的 Key ID。gpg --armor --export YOUR_KEY_ID
例如:
gpg --armor --export 3AA5C34371567BD2
-
终端会输出一大段以
-----BEGIN PGP PUBLIC KEY BLOCK-----开头,并以-----END PGP PUBLIC KEY BLOCK-----结尾的文本。完整地复制这一整块文本。 -
登录你的 GitHub 账号。
- 点击右上角的头像 -> Settings。
- 在左侧菜单中,点击 SSH and GPG keys。
- 点击右上角的 New GPG key 按钮。
-
在 "Key" 文本框中,粘贴你刚才复制的全部公钥内容。
-
点击 Add GPG key。你可能需要输入 GitHub 密码来确认。
现在,你需要告诉本地的 Git 两件事:
-
用哪个 Key 来签名。
-
以后所有的提交都自动签名。
-
告诉 Git 你的 Signing Key 运行以下命令,把
YOUR_KEY_ID换成你的 Key ID。git config --global user.signingkey YOUR_KEY_ID
例如:
git config --global user.signingkey 3AA5C34371567BD2
-
让 Git 自动为所有提交签名 运行以下命令。这样以后你每次
git commit都会自动尝试签名,不用每次都手动加-S参数。git config --global commit.gpgsign true
大功告成!现在我们来实际操作一下,验证所有配置是否生效。
-
找一个你自己的 Git 仓库(或者新建一个),进入该仓库的目录。
-
随便修改一个文件,或者新建一个文件。
-
执行标准的 Git 提交流程:
# 将文件添加到暂存区 git add . # 提交更改 git commit -m "feat: This is my first signed commit"
-
在执行
git commit后,系统很可能会提示你输入 GPG 密码(就是你在第 2 步设置的那个)。正确输入后按回车,提交就完成了。- 小提示:系统可能会通过
gpg-agent缓存你的密码一段时间,所以短时间内多次提交可能不会重复要求输入密码。
- 小提示:系统可能会通过
-
将这次提交推送到 GitHub:
git push
-
去 GitHub 验证! 打开你的 GitHub 仓库页面,找到你刚刚的这次提交。你会发现,在提交记录的旁边,出现了一个闪亮的绿色 "Verified" 徽章!
-
问题:
git commit时报错gpg failed to sign the data或Inappropriate ioctl for device-
原因: GPG 不知道在哪个终端窗口请求输入密码。
-
解决方案: 在你的 shell 配置文件中(如
.bashrc,.zshrc等)添加以下这行代码,然后重启终端。export GPG_TTY=$(tty)
-
-
问题:提交在 GitHub 上显示 "Unverified"
-
原因1: 你生成 GPG Key 时使用的邮箱地址,和你
git config user.email设置的邮箱,以及在 GitHub 绑定的邮箱不一致。 - 解决方案1: 确保这三个地方的邮箱地址是完全相同的,并且该邮箱已经在 GitHub 上完成了验证。
- 原因2: 你可能把错误的 GPG Key 添加到了 GitHub。
- 解决方案2: 重新执行第 3 步,确保导出和添加的公钥是正确的。
-
原因1: 你生成 GPG Key 时使用的邮箱地址,和你
恭喜你!你已经成功配置了 GPG 签名,从此你的每一次代码提交都有了官方认证,安全性和专业性都上了一个台阶!