在 GitHub 上使用 SSH 和 GPG
前言
为什么要配置 SSH
虽然大多数开发者将项目推送到 GitHub 或克隆到本地用的是 HTTPS,但是这有很多弊端,例如:
每次推送都需要输入账号和密码
此方法已经无效,GitHub 在
2021 年 8 月 13 日
移除了密码身份验证支持选项。现只能使用 SSH 或 个人访问密钥。
详见 Token authentication requirements for Git operations | The GitHub Blog由于特殊的网络环境,使用 HTTPS 裸连推送时常失败。
而 SSH 可以说是弥补是上述的缺点:
使用 SSH 推送几乎不会出现 连接已重置 或 连接超时 这些情况。
使用 SSH 推送或克隆无需输入账号密码
为什么要配置 GPG
起因是因为我有时在 GitHub 上翻阅其他项目的提交记录时,都有 Verified
的标记 ,看起来很舒服 。
过程
好了,言归正传,下面教程正式开始。
配置 SSH
以 Linux 为例,打开命令行
输入如下命令并一路回车[1]
Windows 用户请在 Git Bash 中操作。
1 | ssh-keygen -t rsa -C "你的 GitHub 上设置的已验证的邮箱" |
例如,我的邮箱是 wang3311835119@hotmail.com
,那么我就输入:
1 | ssh-keygen -t rsa -C "wang3311835119@hotmail.com" |
输入如下命令,复制输出公钥内容
1 | cat ~/.ssh/id_rsa.pub |
打开 SSH and GPG keys | GitHub
点击 New SSH key
[2]
粘贴复制的公钥内容到 Key
文本框中,点击 Add SSH key
,之后会要求输入密码,输入后点击 Confirm password
即可
确保配置的有效性
输入如下命令进行测试[3]
1 | ssh -T git@github.com |
出现如下类似内容即为配置成功。
配置 GPG
以 Linux 为例,打开命令行
输入如下命令,回车[4]
Windows 用户请在 Git Bash 中操作。
1 | gpg --full-generate-key |
敲三次回车,然后再输入 y
,回车
输入你的 GitHub 的 用户名 和 验证过的邮箱,确认无误后,输入 O
,回车
输入想要设置的密码,确认。再次输入刚才设置的密码,确认
这会导致在使用 GPG 签名提交时需要输入密码。
如不想,请不输入密码,不断确定。
查看生成的 GPG 密钥
输入如下命令,复制红框中类似的密钥 ID
1 | gpg --list-keys |
查看生成的 GPG 密钥公钥
输入如下命令
1 | gpg --armor --export {你的密钥 ID} |
复制输出的公钥
以
-----BEGIN PGP PUBLIC KEY BLOCK-----
开头
以-----END PGP PUBLIC KEY BLOCK-----
结尾
打开 SSH and GPG keys | GitHub ,点击 New GPG key
粘贴复制的公钥内容到 Key
文本框中,点击 Add GPG key
,之后会要求输入密码,输入后点击 Confirm password
即可
配置在 Git 中使用 GPG 密钥对提交进行签名
让 Git 知道签名所用的 GPG 密钥 ID[5]
1 | git config --global user.signingkey {你的密钥 ID} |
在每次提交时,加上 -S
参数,表示此次提交需要用 GPG 密钥进行签名[6]
1 | git commit -S -m "..." |
如果觉得每次都需加上 -S
麻烦,可以设置 Git 为每次的提交自动签名
1 | git config --global commit.gpgsign true |
可选步骤:信任 Github 的 GPG 密钥
导入 GitHub 的 GPG 密钥[7]
1 | curl https://github.com/web-flow.gpg | gpg --import |
信任 GitHub 的密钥(用自己的密钥对其进行签名)
1 | gpg --sign-key 4AEE18F83AFDEB23 |
提示 Really sign? (y/N)
时,请输入 y
,回车。