如何在Windows 10下配置SSH/PuTTY以使用YubiKey OpenPGP认证?
解决Windows 10下YubiKey OpenPGP接口SSH认证失败(无PIN提示)的问题
碰到这种YubiKey OpenPGP+SSH认证卡在没PIN提示、登录失败的情况,我之前也踩过不少坑,给你一步步拆解排查:
1. 先确认gpg-agent的SSH代理功能真的开了
gpg-agent默认可能只启用PGP相关功能,得手动开启SSH支持:
- 找到
%APPDATA%\gnupg目录下的gpg-agent.conf文件(没有就新建一个),添加两行:
enable-ssh-support enable-extended-key-format
- 保存后重启gpg-agent,在命令行输这俩命令:
gpg-connect-agent killagent /bye gpg-connect-agent /bye
- 还要确保Windows的
SSH_AUTH_SOCK环境变量指向gpg-agent的SSH套接字,输这个命令设置:
set SSH_AUTH_SOCK=%APPDATA%\gnupg\S.gpg-agent.ssh
嫌每次重启都输麻烦的话,直接把这个变量加到系统环境变量里就行。
2. 验证YubiKey的认证密钥被gpg-agent识别了
先确认YubiKey的OpenPGP卡片正常读取:
- 命令行输
gpg --card-status,看输出里的Authentication key(这是SSH认证专门用的密钥槽)有没有正常显示,要是这栏空的或者报错,那大概率是你之前生成密钥时没把认证密钥写到YubiKey的对应槽位里,得重新初始化OpenPGP应用并写入认证密钥。 - 再输
ssh-add -L,如果能看到一串以ssh-rsa或类似开头的公钥,说明gpg-agent已经加载了YubiKey的密钥;要是没输出,试试输gpg-connect-agent "scd serialno" /bye触发一下,再插拔YubiKey试试。
3. 给PuTTY的代理配置做个检查
PuTTY不会自动用gpg-agent的SSH代理,得手动调设置:
- 打开PuTTY,进到
Connection > SSH > Auth页面:- 勾选
Allow agent forwarding - 别在
Private key file for authentication里选本地文件,确保Attempt authentication using Pageant是勾上的(不过这里我们用的是gpg-agent,所以得保证PuTTY能读到SSH_AUTH_SOCK变量——最好从已经设置好这个变量的命令行里启动PuTTY,别直接点桌面快捷方式)
- 勾选
- 嫌图形界面麻烦的话,用
plink命令行测试更清楚:
plink -v 你的用户名@服务器IP
看输出日志里有没有Trying agent key...的内容,要是没有,说明PuTTY没连上gpg-agent的代理,大概率是环境变量没生效。
4. 为啥连PIN提示都没?重点排查这几点
没PIN提示基本说明gpg-agent压根没检测到YubiKey,或者密钥槽配置错了:
- 打开YubiKey Manager,切到OpenPGP选项卡,看看
Authentication密钥是不是存在,有没有被锁定。 - 开gpg-agent的日志找线索:在
gpg-agent.conf里加两行:
log-file %APPDATA%\gnupg\gpg-agent.log debug-level advanced
重启gpg-agent后再试SSH登录,然后去日志里找有没有card not found、key not available这类错误信息,直接定位问题。
- 还有Windows的UAC权限坑:试试用管理员身份打开命令行,再跑所有测试命令,有时候普通权限会导致程序读不到YubiKey。
5. 别忘检查服务器端的配置!
很多人会忽略这一步:你提取的公钥必须正确加到服务器的~/.ssh/authorized_keys文件里:
- 确保公钥格式是SSH兼容的(比如开头是
ssh-rsa),复制的时候别漏了字符、别乱换行。 - 服务器上的
.ssh目录权限要设成700,authorized_keys文件权限设成600,权限不对服务器会拒绝认证。
最后走一遍完整测试流程
按这个顺序来,大概率能解决:
- 任务管理器里杀掉所有
gpg-agent.exe进程 - 命令行里设置好
SSH_AUTH_SOCK变量 - 插入YubiKey
- 输
gpg --card-status确认卡片被识别 - 输
ssh-add -L确认公钥加载成功 - 用
plink -v 用户名@服务器IP测试登录,看是不是出现PIN提示了
内容的提问来源于stack exchange,提问作者burnersk
相关产品推荐
相关产品推荐

