跳转至

Yubikey-PIV-as-SSH-Key

简介使用 Yubikey 作为 SSH 密钥。

先决条件### 1. 安装 OpenSC 和 YubiKey Manager(仅限 CLI)

在 Ubuntu/Debian 上```

sudo apt update sudo apt install opensc yubikey-manager

### 2. 如果这是新的 Yubikey,请更改默认的 PIV 管理密钥、PIN 和 PUK。
`ykman`工具可以为您生成新的管理密钥。对于 PIN 和 PUK,您需要提供自己的值(6-8 位数字)。
ykman piv change-management-key --touch --generate ykman piv change-pin -P 123456 ykman piv change-puk -p 12345678
确保将生成的密码保存在安全的地方,例如密码管理器。任何时候生成密钥对、导入证书或更改 PIN 或 PUK 重试次数时都需要管理密钥
PUK 也应该保存在安全的地方。如果 PIN 码输入错误次数过多,则使用此方法。
## 生成 PIV 密钥
1. 确保 Yubikey 上启用 CCID 模式
ykman mode
如果 CCID 不在列表中,请通过将 CCID 添加到列表中来启用它,例如
ykman mode OTP+FIDO+CCID
(这假设您之前有 OTP+FIDO,并且仍然希望启用它们。)
2. 生成PIV密钥并输出公钥
ykman piv generate-key 9a pubkey.pem
或者,您可以要求每次访问该插槽时都必须触摸 Yubikey:
ykman piv generate-key --touch-policy always 9a pubkey.pem
默认情况下,这是一个 RSA 2048 位密钥。根据您拥有的 Yubikey,您可以使用`-a`/`--algorithm`进行更改。
(9a 是 PIV 身份验证槽。)
3. 生成自签名 X.509 证书
ykman piv generate-certificate -s "SSH key" 9a pubkey.pem
## 视窗1. 设置系统路径
进入控制面板→系统和安全→系统→高级系统设置
单击“环境变量...”
在系统变量下,突出显示“路径”并单击“编辑...”
单击“新建”并添加 Yubico PIV Tool\bin 的绝对路径
2. 设置ssh配置文件
打开 PowerShell 并运行以下命令:
New-Item -Path $env:USERPROFILE.ssh -Name "config" -ItemType "file" -Value ` 'PKCS11Provider "C:\Program Files\Yubico\Yubico PIV Tool\bin\libykcs11.dll"'

## Linux
1. 从 Yubikey 导出您的 SSH 公钥
ssh-keygen -D /usr/local/lib/opensc-pkcs11.so
这就是所有困难的事情。
现在只需将公钥添加到远程主机上的`authorized_keys`文件中并尝试使用它:
ssh -I /usr/local/lib/opensc-pkcs11.so -i /usr/local/lib/opensc-pkcs11.so -o IdentitiesOnly=yes server.example.com
系统应该提示您输入 Yubikey 的 PIV PIN。
您可以将 PKCS11 库添加到`ssh-agent`。
ssh-add -s /usr/local/lib/opensc-pkcs11.so
系统将再次提示您输入 PIN,然后 SSH 身份验证将照常进行。
要将`ssh`配置为使用 Yubikey 的 SSH 密钥,请使用`PKCS11Provider`配置选项而不是`IdentityFile`,例如:
Host foo PKCS11Provider /usr/local/lib/opensc-pkcs11.so IdentitiesOnly yes ````

附加说明

  • 使用 SSH 时,可能会提示您输入密钥的使用者名称,例如Enter PIN for 'SSH key':。但是,如果您将密钥添加到代理,您将收到类似Enter passphrase for PKCS#11:的提示。这些是相同的 PIN(您的 PIV PIN)。
  • 如果您使用ssh-add -dssh-add -D从 ssh-agent 中删除密钥,则必须删除 PKCS 库并将其重新添加到代理中,或者重新启动代理。 - 重新添加库运行 ssh-add -e /usr/local/lib/opensc-pkcs11.so ssh-add -s /usr/local/lib/opensc-pkcs11.so

参考文献[1].https://github.com/jamesog/yubikey-ssh

[2].SSH 配置