我正在参加「初夏创意投稿大赛」详情请看:初夏创意投稿大赛
系统环境(Mac OS):
gpg(version >= 2.1.17,版本gnupg已包含gpg-agent)
注意事项:GPG2默认交互式输入密码,此和GPG1有所区别,对应的解决方案供参考。
brew install(MacOS系统下推荐brew安装):
brew install gnupg
备注:
版本信息(截至2022.06.19)
gnupg: stable 2.3.6 (bottled)
GNU Pretty Good Privacy (PGP) package
https://gnupg.org/
/usr/local/Cellar/gnupg/2.3.6 (149 files, 13.3MB) *
Poured from bottle on 2022-05-04 at 00:14:15
From: https://mirrors.ustc.edu.cn/homebrew-core.git/Formula/gnupg.rb
License: GPL-3.0-or-later
生成以及查看密钥
- 生成密钥(交互选择建议默认)
gpg --full-generate-key
* 在提示时,指定要生成的密钥类型,或按 Enter 键接受默认值。
* 在提示时,指定想要的密钥大小,或按 Enter 键接受默认值。 密钥必须至少是 4096 位。
* 输入密钥的有效时长。 按 Enter 键将指定默认选择,表示该密钥不会过期。
* 验证您的选择是否正确。
* 输入您的用户 ID 信息。
- 查看已签发密钥
gpg --list-secret-keys --keyid-format=long
- 查看指定公钥的信息(Prints the GPG key ID, in ASCII armor format)
gpg --armor --export <GPG key ID>
复制公钥信息到GitHub上:
从 -----BEGIN PGP PUBLIC KEY BLOCK----- 开始,到 -----END PGP PUBLIC KEY BLOCK-----
- 设置邮箱(建议全局默认一个常用Email):
git config --global user.email ""
- 设置项目开启GPG验证签名(不建议全局开启,可局部开启,防止影响其他平台或项目的提交引发连锁反应)
git config commit.gpgsign true
GPG密钥导出以及备份
创建导出备份密钥文件的路径(例如):
# 注意:密钥备份完毕后建议清理此目录及文件夹!
mkdir -p ~/GPGBAK
警告:导出的备份密钥为敏感文件,为了安全请确保密钥异地保存妥当后,清理导出当前的备份文件
备份GPG公钥
gpg -o ~/GPGBAK/gpg_keys_github_macos --export <GPG Key ID>
备份GPG私钥
gpg -o ~/GPGBAK/gpg_secret_keys_github_macos --export-secret-keys <GPG Key ID>
常见问题 & 解决方案
-
在终端可能出现git提交commit时提交失败需要输入GPG密码解密密钥? 可设置终端信息,然后重新开启一个终端生效。
错误信息:
error: gpg 数据签名失败 fatal: 写提交对象失败解决方案:
vim ~/.zshrc# GPG CONFIG (交互式窗口不弹出解决方案) export GPG_TTY=$(tty)GPG2密码缓存时间设置: 默认文件不存在则创建
touch ~/.gnupg/gpg-agent.conf推荐文件配置gpg-agent 选项(密码缓存有效时间(不建议ttl设置过长!)
- GnuPG agent是一个帮助工具,当你运行gpg用于缓存私钥时会自动运行。
- default-cache-ttl(seconds):如果在失效期前,使用了相同名称的私钥,那么计数器会被重置,默认是600s(10min)
- max-cache-ttl (seconds):不论你最近是否使用过私钥,只要超过了此值,就需要进行重新验证,默认是30min
- 可设置长时间,但不建议太长,还有一种是定期刷新有效时间,但需要配置系统任务容易遗忘所以不推荐。
default-cache-ttl 1800 max-cache-ttl 7200重启 gpg-agent进程:
echo RELOADAGENT | gpg-connect-agent -
提交推送完成后GitHub仍然提示未验证?
解决方案:
检查本地提交的GIT默认邮箱和GitHub平台的登记邮箱是否一致,不一致可修改当前项目的邮箱保持和GPG一致即可。 -
其他平台如何设置?
解决方案:
其他GIT在线平台和GitHub操作方法基本一致。