惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
D
Docker
Google DeepMind News
Google DeepMind News
Y
Y Combinator Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Blog — PlanetScale
Blog — PlanetScale
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
U
Unit 42
博客园 - 【当耐特】
N
Netflix TechBlog - Medium
V
Visual Studio Blog
Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
Recent Announcements
Recent Announcements
GbyAI
GbyAI
T
Tailwind CSS Blog
S
SegmentFault 最新的问题
WordPress大学
WordPress大学
T
The Blog of Author Tim Ferriss
Engineering at Meta
Engineering at Meta
L
LangChain Blog
A
About on SuperTechFans
M
MIT News - Artificial intelligence
B
Blog

Dejavu's Blog

甲骨文 ARM 实例部署 Gemma 4 模型 Headscale + Tailscale 组建虚拟专用网 在 Linux 上使用 Yubikey OpenPGP 应用 BuyVM VPS 块存储挂载教程 Alpine Linux 服务器配置指南 Alpine Linux 安装 Cloudflared Docker 多容器共享中心数据库 安装 Komari 服务器监控工具 Scaleway VPS 安装 Debian Linux Debian 13 下部署 AsmBB 论坛 使用 Kopia 自动化备份服务器数据 给 Docker 启用 IPv6 支持 Netcup 服务器安装自定义 ISO 镜像 烽火 HG5582A 光猫开启桥接模式 Docker 自托管 Shlink 短链服务 部署 Obsidian LiveSync 实时同步服务指南 我的 2025 年不完全回顾 Linux 下 Intel 核显驱动配置与硬件加速 Fedora Linux 安装配置记录 2025 年优雅地自托管 RSS 服务 Woodpecker CI 和 Gitea 实现 Hugo 自动部署 Gitea/Forgejo 集成 Woodpecker CI/CD 在 Blinko 中使用 Ollama 作为 AI 供应商 Docker 部署 Gitea/Forgejo Plausible CE 启用城市级地理位置识别 Blinko 开源 AI 知识库 Docker 部署指南 Netcup 免税账号注册及购买服务器全记录 Docker 自托管 Cloudreve Pro 私有网盘服务 GiffGaff SIM 卡使用体验和注意事项 简体中文互联网在变得糟糕吗?
在 macOS 上使用 Canokey 的 OpenPGP 应用
Dejavu Moe · 2022-07-15 · via Dejavu's Blog

准备

在开始前,确保已经在 macOS 上安装好 Homebrew

pinentry-mac 是 macOS 下 GPG 应用的 Pinentry 实现

brew install git\
openssh \
gnupg \
vim \
pinentry-mac

配置 Git 信息

# 验证 Git 安装
git --version
# 配置 Git 用户信息,注意替换成你自己的
git config --global user.name "DejavuMoe"
git config --global user.email "[email protected]"

设置签名密钥

导入自己的公钥,这里以我在 GitHub 的公钥为例

# 导入公钥
curl https://github.com/DejavuMoe.gpg | gpg --import
# 信任密钥
gpg --expert --edit-key [email protected]
# 输入 trust 命令选择信任等级
gpg> trust

请决定您对这名用户能否正确地验证其他用户密钥
(通过查看护照,检查不同来源的的指纹等等)的相信程度

  1 = 我不知道或不作答
  2 = 我不相信
  3 = 我勉强相信
  4 = 我完全相信
  5 = 我绝对相信
  m = 回到主菜单

您的决定是什么? 5
您真的要把这个密钥设置成绝对信任?(y/N) y

现在可以将存有私钥信息的 Canokey/Yubikey 插入 Mac 了

# 查看智能卡状态
gpg --card-status
# 编辑智能卡
gpg --card-edit
# 将子密钥指向 Canokey
gpg/card> fetch
# 退出 
gpg/card> quit

接下来设置用于签名的 OpenPGP 子密钥

gpg --card-status
# 找到用于签名应用的子密钥 ID,比如 ed25519/AC65D1D723ABCD64
# 设置用于签名的子密钥 ID
git config --global user.signingkey ed25519/AC65D1D723ABCD64
# 全局开启 Git 签名要求
git config --global commit.gpgsign true

设置 SSH

看一下 pinentry-mac 的安装路径

which pinentry-mac
/opt/homebrew/bin/pinentry-mac

编辑 gpg agent 启动的配置文件

vim ~/.gnupg/gpg-agent.conf

写入以下内容保存

pinentry-program /opt/homebrew/bin/pinentry-mac
enable-ssh-support
default-cache-ttl 600
max-cache-ttl 7200

查看各密钥 Keygrip,实际上我们只需要用于 SSH 访问功能是身份认证 [A] 的子密钥就好了

gpg -K --with-keygrip
# 找到标记 [A] 为身份认证的子密钥的 Keygrip
ssb>  ed25519 2022-01-08 [A] [有效至:2042-06-04]
      Keygrip = 653FADC5EAB512345E196A3D8C419CAFCF637B09
# 将 Keygrip 写入 sshcontrol 文件
echo 653FADC5EAB512345E196A3D8C419CAFCF637B09 >> ~/.gnupg/sshcontrol

将下面内容写入你默认 Shell 的配置文件里(.bashprofile.zshrc),我是 zsh + oh-my-zsh 的组合,所以写进 .zshrc 文件里

export GPG_TTY=$(tty)
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
gpgconf --launch gpg-agent

让配置文件生效

source ~/.zshrc
gpg-connect-agent killagent /bye
gpg-connect-agent /bye
gpg --card-status
ssh-add -l
# 导出 SSH 公钥格式
gpg --export-ssh-key [keyID]

尝试登录

将导出的 SSH 格式公钥添加到 GitHub(或其他需要登录的服务器),尝试登录

ssh -T [email protected]
Hi DejavuMoe! You've successfully authenticated, but GitHub does not provide shell access.

尝试给 Git 提交签名,这时候应该会正常出现 Pinentry 的窗口了

Pinentry Mac

完成,Enjoy!

参考资料: