Yubikey 有大用处之:SSH 登录

缘起

Yubikey 若你知道它是什么的话,你应该晓得它对于注重信息安全和隐私的人们是多么重要啦~(这也是我今天最有成就感的事情之一)

它首先是个 U 盘(其实具体是个 USB 键盘),至少有这么些用处:

SSH key on Yubikey

下面我就介绍介绍怎么把 SSH 登录用的 key 私钥放在 Yubikey 里。

好处:即可随身携带,在多台电脑登录我的 VPS,又免去了把私钥放在本地电脑而被取证的担忧。

以下分两部分介绍,一是关于如何在 Yubikey 上生成 SSH 密钥对;二是如何用 Yubikey 里的 key 来 ssh 登录远程服务器。两者需要用到的工具不太一样。

本人已分别在 Slackware 和 OpenBSD 1 上成功使用了 Yubikey。

(首次使用)重置 Yubikey 相关 key/PIN

需要安装:

把 yubikey 设置为 smart card 模式:

  ykpersonalize -m86

更改 yubikey 里的初始密钥密码,一般首次使用时都要求更改一下:

注: 后来官方出了更 high-level 的工具,命令更友好,详情请见:官方文档

在 Yubikey 上生成 SSH 密钥对

需要安装:

方法一:直接在 yubikey 生成 ssh 密钥对:

  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 密钥对然后导入到 yubikey:

  ssh-keygen -m PEM -t ecdsa -b 384 -C yubikey_ecdsa384 -f yubikey_ecdsa384

这样生成了一个叫yubikey_ecdsa384yubikey_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 再重新插入。

导出 SSH 公钥 (如果是直接在 yubikey 生成的 key 的话)

使用 Yubikey 的 SSH key 登录 VPS

需要安装:

先知道 PKCS#11 的库的路径

上面已经提到了。

可以先尝试:

  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 的工具:

Posted on December 12, 2020