安装YubiKey Manager工具
YubiKey Manager 是官方的配置工具,支持 gui 和 cli,开源地址:yubikey-manager。
在 windows 下可以用 winget 来安装:
winget install Yubico.YubikeyManager
cli 和 gui 的程序默认会安装在路径 C:\Program Files\Yubico\YubiKey Manager 下,winget 目前不会像chocolatey 把安装路径添加到环境变量,需要手动去添加。
添加完后就可以直接用 ykman 命令来配置 yubikey 。
Usage: ykman.exe [OPTIONS] COMMAND [ARGS]...
Configure your YubiKey via the command line.
...
修改 PIV 默认 PIN 、PUK、Management Key
第一次使用 YubiKey PIV 需要修改相关默认配置。
ykman piv access change-pin
ykman piv access change-puk
ykman piv access change-management-key --protect --touch
过程中可能会提示输入当前值,默认 PIN 码为 123456,默认 PUK 码为 12345678。
Management key 用于保护密钥,所以设置 Management key 很重要,不然保存的密钥可以被抹除 : ( 。
使用 YubiKey 登录 SSH
生成非对称密钥
yubiKey 支持 RSA1024 | RSA2048| ECCP256| ECCP384 算法,这里我选择 ECCP256,保存在 9A 槽上,关于 PIV 插槽说明,可以查看官方文档),输出公钥 pubkey.pem。
ykman piv keys generate -a ECCP256 --pin-policy=once --touch-policy=always 9a pubkey.pem
后续如果公钥文件遗失,可以通过 yubikey 导出。
ykman piv keys export 9a pubkey.pem
服务端部署公钥
先把 pubkey.pem 传到服务端,然后转换为 SSH 公钥。
ssh-keygen -i -m pkcs8 -f pubkey.pem
把输出的内容复制到 ~/.ssh/authorized_keys,最后重启 SSH 服务端。
设置 SSH 客户端支持 YubiKey PIV
基于 YubiKey 的 PKCS#11 扩展,让 SSH 客户端通过 YubiKey 连接服务端。
Windows 自带的 OpenSSH
更新 OpenSSH 到 Beta 版。
winget install "openssh beta"
下载 yubico-piv-tool Releases ,安装 openssh 对应版本下的 x86/x64 版本,一般装的是 x64 版本。
假设安装的 x64 版本 ,编辑 %userprofile%\.ssh\config ,如果没有可以新建一个,添加下面内容,添加前确定路径内的 libykcs11.dll 是否存在。
PKCS11Provider "C:\Program Files \Yubico\Yubico PIV Tool\bin\libykcs11.dll"
然后打开命令行,假设你要连的 IP 是 192.168.1.1 。
ssh root@192.168.1.1
提示输入 PIN 值,如果没反应可能是需要你触摸一下 yubico 。
OpenSC 中间件
下载 OpenSC,选x86 还是 x64 视 SSH 客户端而定,比如,装在 C:\Program Files (x86) 下的 XShell 就用 x86。
安装的时候选 Typical 。
生成证书。
ykman piv certificates generate --subject "SSH" 9a pubkey.pem
如果是 ECC 算法还需要安装 YubiKey Minidriver。截至我测试的时候,XShell 不支持 ECC 算法的证书,推荐生成 RSA 2048 证书。
设置 XShell,会话 -> 用户身份验证 -> PKCS11 。
设置 PKCS11,中间件选安装的 OpenSC 目录,pkcs11\opensc-pkcs11.dll ,令牌引脚填 pin 码。
XShell 连接会话,没反应的时候可能是需要触摸 yubico,一次或两三次。
pageant 代理
下载 putty-cac 的 pageant,或者 WinCryptSSHAgent。
生成证书,参考 OpenSC 中间件。
pageant 打开后勾选 Autoload Certs & Keys,双击后会显示 key lists 包含yubico 证书。
XShell 会话 -> SSH -> 使用 Xagent 进行身份认证。
用户身份验证 -> Public key。
MobaXterm 设置 SSH -> Use external Pageant。
使用 YubiKey 进行 Git 签名
…
生成 PGP 密钥
…
生成认证密钥
…