跳转至

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]