Yubikey
若你知道它是什么的话,你应该晓得它对于注重信息安全和隐私的人们是多么重要啦~(这也是我今天最有成就感的事情之一)
它首先是个 U 盘(其实具体是个 USB 键盘),至少有这么些用处:
下面我就介绍介绍怎么把 SSH 登录用的 key 私钥放在 Yubikey 里。
好处:即可随身携带,在多台电脑登录我的 VPS,又免去了把私钥放在本地电脑而被取证的担忧。
以下分两部分介绍,一是关于如何在 Yubikey 上生成 SSH 密钥对;二是如何用 Yubikey 里的 key 来 ssh 登录远程服务器。两者需要用到的工具不太一样。
本人已分别在 Slackware 和 OpenBSD 1 上成功使用了 Yubikey。
需要安装:
service pcscd start
) ykpersonalize -m86
dd if=/dev/random bs=1 count=24 2>/dev/null | hexdump -v -e '/1 "%02X"'
yubico-piv-tool -aset-mgm-key -n<key>
yubico-piv-tool -achange-pin -P123456 -N<PIN>
yubico-piv-tool -achange-puk -P12345678 -N<PUK>
重要: 请把这些存储在一个安全的地方。
注: 后来官方出了更 high-level 的工具,命令更友好,详情请见:官方文档
需要安装:
service pcscd start
) yubico-piv-tool --key=<key> -s 9a -a generate -o rsa.public
其中 -key=<key>
就是你之前设置的 management key。
也可以简化为:
yubico-piv-tool -s 9a -a generate -o public.pem
ssh-keygen -m PEM -t ecdsa -b 384 -C yubikey_ecdsa384 -f yubikey_ecdsa384
这样生成了一个叫yubikey_ecdsa384
和 yubikey_ecdsa384.pub
的文件。接下来我们把私钥导入到 yubikey:
mv yubikey_ecdsa384 yubikey_ecdsa384.key # just to rename the key
yubico-piv-tool --key=<key> --pin-policy=once --touch-policy=always -s 9a \
-a import-key -i yubikey_ecdsa384.key
也可以简化为:
yubico-piv-tool -s 9a -a import-key -i key.pem (注意需要转为 pem 格式)
还需要为导入的 ssh key 生成证书(证明是您导入的):
openssl ec -inform PEM -in yubikey_ecdsa384.key -outform PEM \
-pubout -out yubikey_ecdsa384.public
yubico-piv-tool -a verify -a selfsign --valid-days 3650 -s 9a \
-S "/CN=SSH key yubikey_ecdsa384/" -i yubikey_ecdsa384.public -o cert.pem
yubico-piv-tool --key=<key> --pin-policy=once --touch-policy=always \
-a import-certificate -s 9a -i cert.pem
也可以简化为:
yubico-piv-tool -a verify-pin -a selfsign-certificate -s 9a -S "/CN=SSH key/" -i public.pem -o cert.pem
yubico-piv-tool -a import-certificate -s 9a -i cert.pem
此时,记得拔出 yubikey 再重新插入。
ykcs11
这个包在系统上。如果没有,也可以自行安装opensc
这个包。
/usr/lib64/opensc-pkcs11.so
/usr/local/lib/pkcs11/opensc-pkcs11.so
/usr/local/lib/libykcs11
/usr/local/lib/libykcs11.dylib
ssh-keygen -D path/to/libykcs11.so -e
authorized_keys
里啦~!需要安装:
service pcscd start
)ykcs11
库上面已经提到了。
可以先尝试:
ssh -I/path/to/pkcs11/opensc-pkcs11.so <host>
成功了的话就把它写到 ssh client 的配置文件里:
vi ~/.ssh/config
PKCS11Provider /path/to/opensc-pkcs11.so
也可以让密钥一直留在内存里喔:
ssh-add -s/path/to/opensc-pkcs11.so
大功告成!
注1: 也可以选用图形化的工具来操作:
注2: 后来官方又出了个更 high-level 的工具:
ykpers
;可且仅取代 yubico-piv-tool
)