GPG + SSH 统一身份认证指南
本手册旨在指导如何利用 GPG 的 认证子密钥 (Authentication Subkey) 替代传统的 SSH Key,实现代码签名与服务器登录的身份统一。
1. 核心架构理解
- 主密钥 [SC]:用于管理(签发、撤销)子密钥。应安全离线保存。
- 子密钥 [S]:用于 Git Commit 签名。
- 子密钥 [E]:用于加密文件。
- 子密钥 [A]:用于 SSH 登录认证(核心)。
2. 常用管理命令
密钥信息查询
# 列出私钥并显示 Keygrip(Keygrip 是关联 SSH 的关键)
gpg -K --with-keygrip
# 将 GPG 认证密钥转换为 SSH 公钥格式
gpg --armor --export-ssh-key [email protected]
3. 配置 GPG SSH
~/.gnupg/gpg-agent.conf
enable-ssh-support
pinentry-program /usr/bin/pinentry-curses
allow-loopback-pinentry
default-cache-ttl 28800
max-cache-ttl 86400
~/.gnupg/sshcontrol
# 格式:Keygrip 缓存时间 备注名
F1E2D3C4B5A6978877665544332211AA00BBCCDD 0 sarto-github-auth
~/.bashrc
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
export GPG_TTY=$(tty)
gpg-connect-agent updatestartuptty /bye > /dev/null
生成 ssh 公钥,粘贴到 GitHub 中
gpg --export-ssh-key <你的密钥ID>
测试
验证 Agent 状态
ssh-add -L
验证 GitHub SSH 连通性
ssh -T [email protected]