GPG 命令#
创建 gpg key#
1
2
3
4
5
6
7
8
9
| $ gpg --full-generate-key # 生成 gpg key
gpg: directory '/home/ubuntu/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/home/ubuntu/.gnupg/openpgp-revocs.d/ECA3A621F79A890A23D03ED5D5634A568BBCEDC4.rev'
public and secret key created and signed.
pub ed25519 2024-11-09 [SC]
ECA3A621F79A890A23D03ED5D5634A568BBCEDC4
uid test <[email protected]>
sub cv25519 2024-11-09 [E]
|
1
2
3
4
5
6
7
| $ gpg --list-key # 简化写法 gpg -k
/home/ubuntu/.gnupg/pubring.kbx
-------------------------------
pub ed25519 2024-11-09 [SC]
ECA3A621F79A890A23D03ED5D5634A568BBCEDC4
uid [ultimate] test <[email protected]>
sub cv25519 2024-11-09 [E]
|
列出所有公钥、子公钥
- pub 后市该密钥公钥的特征,密码参数(ed25519 算法,生成于 2024-11-09,用途是 sign 和 certificate),第二行是密钥 id。(该 gpg 密钥没有设置过期时间,否则会有个 expires: xxxx-xx-xx)
- uid 是创建时输入的个人信息
- sub 后面是默认一起创建的子密钥特征
1
| $ gpg --list-secret-keys # 简化写法 gpg -K
|
列出所有私钥、子私钥
- 加上
--fingerprint
输出指纹信息 - 加上
--keyid-format long
输出子密钥的信息
1
2
3
4
5
6
7
| $ gpg -k --fingerprint --keyid-format long
/home/ubuntu/.gnupg/pubring.kbx
-------------------------------
pub ed25519/D5634A568BBCEDC4 2024-11-09 [SC]
Key fingerprint = ECA3 A621 F79A 890A 23D0 3ED5 D563 4A56 8BBC EDC4
uid [ultimate] test <[email protected]>
sub cv25519/D10AC240C941B8D4 2024-11-09 [E]
|
添加设置 ~.gnupg/gpg.conf
,就不用每次都输入这俩 option 了。
1
2
| keyid-format 0xlong
with-fingerprint
|
输出密钥#
1
2
3
| $ gpg --armor --output public-key.txt --export [key_id] # 输出指定公钥到 public-key.txt
$ gpg --export --armor [key_id] # 输出到 stdout
$ gpg --armor --output private-key.txt --export-secret-keys # 输出私钥到 private-key.txt
|
与公钥服务器交互#
1
2
3
| $ gpg --export [email protected] | curl -T - https://keys.openpgp.org
# 将用户的 key 发送到公钥服务器,以便他人获取
$ gpg --import [key_file]
|
1
2
| $ gpg -ao public-key.txt --export [key_id]
$ gpg -ao secret-key --export-secret-key [key_id]! # --armor --output. 结尾不加 ! 会同时输出主私钥和子私钥
|
1
2
| $ gpg --delete-secret-keys [key_id]
$ gpg --delete-keys [key_id]
|
对 git commit 进行签名#
1
2
3
| $ git config --global user.signkey [key_id] # 设置 sign key id
$ git commit -S -m "..." # -S 单独的对某一个 commit 进行签名. 输入创建 key 时指定的 passphrase就好
$ git config --global commit.gpgsign true # 设置对全部的 commit 进行签名,不用再 -S
|
Github 关联 GPG 公钥#
运行命令 gpg --armor --export [key_id]
,--armor
表示以 ascii 字符的形式输出。
将命令的输出在 Github Add new GPG key 导入。
Trouble Shooting#
git commit 报错 PINENTRY_LAUNCHED 33014 curses 1.2.1 not a tty xterm-256color :0 ? 1000/1000 -
GPG入门教程
在 Github 上使用 GPG 的全过程
2021年,用更现代的方法使用PGP(上)
2021年,用更现代的方法使用PGP(中)
2021年,用更现代的方法使用PGP(下)
GPG fails to load pinentry