目前网上很少关于 Windows 上使用 Yubikey 登录 SSH 的资料,而且绝大部分教程都是教你怎么使用 OpenPGP 模式,通过 gpg-agent 完成 SSH 认证。使用 gpg-agent 在 Windows 上的局限性是很大的,很多第三方 SSH 客户端( SecureCRT 之类的)并不能通过 gpg-agent 完成认证,使用起来非常不方便。
因此,我写了个工具(t/565640),简化了在 Windows 系统上使用 SSH 和 Yubikey 的流程。本篇教程基于这个工具,简要介绍在 Windows 上配置 Yubikey PIV 智能卡,以及登录 SSH 的流程。
1. 工具准备
- 安装 Yubikey Manager( https://www.yubico.com/products/services-software/download/yubikey-manager/)
- 下载 WinCrypt SSH Agent( https://github.com/buptczq/WinCryptSSHAgent/releases)
2. 初始化 PIV 证书
打开 Yubikey Manager, 在Applications中选择PIV, 然后选择Configure Certificates。在Authentication槽位下选择Generate生成证书。算法推荐选 RSA2048,兼容性和安全性都较好。生成好后就可以看到Authentication槽位下有证书了:

3. 查看公钥
打开 WinCrypt SSH Agent,在任务栏托盘的图标上右键,选择Show Public Keys,就可以看到你刚刚生成的证书对应的 SSH 公钥了,将这个公钥添加到服务器~/.ssh/authorized_keys中即可。
如果显示了多个公钥,这是应为你有多个数字证书,可以根据公钥结尾的名称区分对应的是哪个证书。
4. 设置环境变量
打开 WinCrypt SSH Agent,在任务栏托盘的图标上右键,选择你需要使用的 SSH 客户端类型,设置对应的环境变量即可。这里以 WSL 为例介绍:
- 在任务栏托盘的图标上右键,选择
WSL Help - 打开 WSL,贴入刚刚显示的命令
- SSH 连接服务器即可

如果想不用每次都设置环境变量,可以对环境变量做持久化,并把 WinCrypt SSH Agent 加入开机启动项。
WSL 和 Cygwin 可以在.bashrc 中设置
WinSSH 和 SecureCRT 可以在 Windows 的系统设置中配置
