Yubikey 最酷的特性之一就是通过 PKCS#11 来验证 SSH。 把私钥存储在 Yubikey 上,无论在何时,当它被访问后都可以反馈你的操作。
除了常见的远程登录,所有通过 SSH 连接的操作(使用远程 git 服务器(比如 Github))都可以触发这一行为。这是客户端的保护手段,用来防止在未授权的情况下获取到 SSH 私钥。
需要注意的是,只有 RSA 密钥支持这种操作。
-
1. 创建一对 2048-bit 的 RSA 钥匙串:
yubico-piv-tool -s 9a -a generate -k --pin-policy=once --touch-policy=always --algorithm=RSA2048 -o public.pem
输入你的 Yubikey 的管理密钥。
-
2. 创建一个自签名证书:
yubico-piv-tool -a verify-pin -a selfsign-certificate -s 9a -S '/CN=ssh/' --valid-days=365 -i public.pem -o cert.pem
输入 PIN 码然后触摸 Yubikey。
-
3. 导入已(自)签名的证书:
yubico-piv-tool -k -a import-certificate -s 9a -i cert.pem
输入你的 Yubikey 的管理密钥。
-
4. 以 OpenSSH 使用的正确格式导出存储在 Yubikey 上的公钥(Clear the SSH agent):
ssh-add -Dssh-add -e /usr/local/lib/libykcs11.dylib
ps: MacOS寻找libykcs11.dylib,使用find / -name "*libykcs11*"
现在可以将这个公钥粘贴到服务器的 ~/.ssh/authorized_keys
用作 SSH 验证了。
5. 检查 9a 插槽的状态(可选):
yubico-piv-tool -a status
-
6. 通过 PKCS#11 添加私钥到本地 ssh-agent:
ssh-add -s /usr/local/lib/libykcs11.dylib
当它询问密码时输入你的 Yubikey 的 PIN 码。
-
7. 确定私钥已经被添加:
ssh-add -L
-
8. PKCS11Provider 添加到 ~/.ssh/config
中:
Host ${VPS_IP} PKCS11Provider /usr/local/lib/libykcs11.dylib Port 22 User root
原文始发于微信公众号(KQsec):MacOS 通过 yubikey 使用 PIV 和 PKCS#11 免密验证登录服务器SSH
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论