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

推荐订阅源

博客园 - 司徒正美
大猫的无限游戏
大猫的无限游戏
腾讯CDC
J
Java Code Geeks
博客园 - 【当耐特】
Microsoft Azure Blog
Microsoft Azure Blog
V
Visual Studio Blog
人人都是产品经理
人人都是产品经理
博客园 - Franky
博客园 - 聂微东
阮一峰的网络日志
阮一峰的网络日志
美团技术团队
云风的 BLOG
云风的 BLOG
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
U
Unit 42
雷峰网
雷峰网
B
Blog RSS Feed
博客园_首页
量子位
F
Fortinet All Blogs
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
酷 壳 – CoolShell
酷 壳 – CoolShell
C
Check Point Blog

Dejavu's Blog

甲骨文 ARM 实例部署 Gemma 4 模型 Headscale + Tailscale 组建虚拟专用网 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 卡使用体验和注意事项 简体中文互联网在变得糟糕吗? 如何低成本申请 S/MIME 证书用于个人邮件服务
在 Linux 上使用 Yubikey OpenPGP 应用
Dejavu Moe · 2026-04-04 · via Dejavu's Blog

引言

跨平台使用 Yubikey OpenPGP 的步骤大同小异,之前已经写了:

本文以 Fedora Workstation 43 (GNOME 桌面环境) 为例,作为 Linux 桌面上使用步骤的补充说明,方便我在新系统上快速设置。

环境准备

[可选] 若需查看 2FA 口令或简单管理 Yubikey,可通过 Flatpak 安装 Authenticator:

flatpak install flathub com.yubico.yubioath

安装 OpenPGP 智能卡相关的核心组件:

sudo dnf install gnupg \
  pcsc-lite \
  pcsc-lite-ccid \
  gnupg2-scdaemon \
  pcsc-tools

启动服务:

sudo systemctl enable --now pcscd

导入 PGP 公钥

和往常一样,在新系统上导入你的 PGP 公钥并设置信任:

# 这是我的 PGP 公钥
curl -fsSL https://pgp.dejavu.moe/ | gpg --import -
# 导入通用配置
wget https://raw.githubusercontent.com/drduh/YubiKey-Guide/master/config/gpg.conf -O ~/.gnupg/gpg.conf
chmod 600 ~/.gnupg/gpg.conf

配置 Git 签名信息:

git config --global user.name <username>
git config --global user.email <email>
git config --global user.signingkey <keyid>
git config --global commit.gpgsign true
git config --global gpg.program /usr/bin/gpg

配置 GPG 服务

检查系统中可用的 pinentry(密码输入)程序:

ls -lh /usr/bin/ | grep pinentry        
-rwxr-xr-x. 1 root root     2.4K Jul 28  2025 pinentry
-rwxr-xr-x. 1 root root      77K Jul 28  2025 pinentry-curses
-rwxr-xr-x. 1 root root      89K Jul 28  2025 pinentry-gnome3

为了在终端和图形化应用中都能获得最佳使用体验,建议通过脚本实现 pinentry 切换器:检测到 TTY 时调用 pinentry-curses,否则调用 pinentry-gnome3

vim ~/.gnupg/pinentry-wrapper.sh

写入判断逻辑:

#!/bin/bash
if [ "$PINENTRY_USER_DATA" = "curses" ]; then
    exec /usr/bin/pinentry-curses "$@"
else
    exec /usr/bin/pinentry-gnome3 "$@"
fi

编辑 gpg-agent.conf 配置文件:

vim ~/.gnupg/gpg-agent.conf

填入以下配置(路径中用户名替换为实际名称):

#ttyname $GPG_TTY
enable-ssh-support
allow-loopback-pinentry
# 指定自定义包装脚本,必须使用绝对路径
pinentry-program /home/dejavu/.gnupg/pinentry-wrapper.sh
# 或者选择你期望的 pinentry 程序
#pinentry-program /usr/bin/pinentry-curses
#pinentry-program /usr/bin/pinentry
#pinentry-program /usr/bin/pinentry-qt
#pinentry-program /usr/bin/pinentry-gnome3
#pinentry-program /usr/bin/pinentry-tty
#pinentry-program /usr/bin/pinentry-x11
# 缓存有效期设置(单位:秒)
default-cache-ttl 3600
max-cache-ttl 7200
default-cache-ttl-ssh 3600
max-cache-ttl-ssh 7200

查看认证子密钥的 KeyGrip 并写入 ~/.gnupg/sshcontrol

# 查看 KeyGrip
gpg -K --with-keygrip

对于 ~/.gnupg/scdaemon.conf:尽管 Yubikey Guide 中建议开启,但在实测中这可能会导致缓存失效,导致每次签名/认证都需要输入 PIN。

若遇到此类问题,建议注释相关选项:

#disable-ccid
#pcsc-shared

环境变量配置

将以下内容追加到 Shell 配置文件(.bashrc.zshrc)中:

# SSH GPG Agent for Yubikey
export GPG_TTY=$(tty)
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
gpgconf --launch gpg-agent
export PINENTRY_USER_DATA="curses"
gpg-connect-agent updatestartuptty /bye > /dev/null

然后根据 Shell 的类型,执行:

source ~/.zshrc
# 或者
source ~/.bashrc

最后重启相关服务,使配置生效:

sudo systemctl stop pcscd pcscd.socket && sudo systemctl start pcscd.socket
gpgconf --kill all && gpgconf --launch gpg-agent

功能测试

重新插入 Yubikey,验证智能卡是否被正常识别:

执行签名测试,检查 PIN 输入窗口:

echo "test" | gpg --clearsign

在终端里预期调用的是 pinentry-curses,就像这样:

test.webp

最后,验证 SSH 公钥读取及认证功能:

至此,Linux 平台上的 Yubikey OpenPGP 环境配置完成。