You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:24:55