YubiKey 初使用

前些日子买了个 YubiKey,今天依旧不想看代码(盯着一百行代码看了俩星期了,有点抑郁),那么就继续学习新知识。

YubiKey

呐,就是这个像 U 盘一样的东西。据说有三种工作模式:

  • 第一种是“键盘模式”,摸一下就生成一个动态密码 / 自动输入固定密码,我觉得没啥用,而且一摸就会产生一串神秘代码,就直接拿 yubikey-personalization-gui 这个东西给干掉了(囧)
  • 第二种是“U2F 模式”,两步验证,可以理解为上古时期的“盛大密保”/“将军令”、现在的“短信验证码”/“Google 身份验证器”,不需要做什么配置,能用的话插上去、摸一下就好了
  • 第三种是“GPG 智能卡模式”,可以存三个 GPG 密钥。

三种模式同时工作,互不影响。其中第一种模式还可以区分 “短摸” 和“长摸”,能分别设置不同的密码生成模式。

总之就是上面的一大堆功能啦,官网都说不清楚……

使用 GPG 密钥免密码登录服务器

这里主要使用智能卡模式,通过存储 GPG 密钥来进行登录。

生成 GPG 密钥

按照网上的教程,生成一个主密钥 + 3 个单一功能的子密钥:

  • E (Encryption) 加密
  • S (Signing) 签署
  • A (Authentication) 认证 -- 这个我不太清楚是干啥的

生成主密钥

然后照着向导一步一步来就好。算法?Default 吧。长度?2048 和 4096 都行。过期时间?10 年?永久?随便吧。

之后会让输入一个密码来保护自己的私钥。还是建议设置个密码吧。

最后会说“我们需要花点时间生成一些随机数”,这时候随便看看剧、晃晃鼠标,打开个记事本随便敲敲键盘什么的都可以。

上面 XXXXXXXX 是这个密钥的代号。记住它,下面会用

生成子密钥

然后用 addkey 分别生成用于加密、签名、认证的子密钥。最后用 savequit 保存并退出。

一定要先备份啊

不然哭都没机会!一旦导入到 YubuKey 里面就再也拿不出来了!

YubiKey 初始化

插上 YubiKey

然后使用 passwd 设置 PIN(默认 123456)和 Admin PIN(默认 12345678)。

  • PIN 码是平时最常用的密码,如果输错三次就会被锁定,需要使用 Reset Code 来解锁,Reset Code 输错三次,只能物理重置
  • Admin PIN 是管理卡信息 (如添加密钥、修改密码) 使用的密码,不能短于 8 位(会被直接锁定),输错三次则管理功能被锁定,只能物理重置
  • Reset Code 好像设置了一直出错…… 遂放弃。出问题物理重置吧……

之后看看自己喜好设置点啥个人信息的。之后 quit 退出。

把密钥写到 YubiKey 里

OK,最重要的来了。

key 空格 数字 定位到子密钥,回车选择 / 反选,之后输入 keytocard 回车,写入 YubiKey 中。三个子密钥要分别进行操作。

本地删除所有密钥:先用 gpg --delete-secret-keys XXXXXXXX 删除私钥,在用 gpg --delete-keys XXXXXXXX 删除公钥。

里面能看到你的主密钥和三个子密钥,但是只有摘要没有其他内容。

你会发现,这时候密钥“又回来了”,但是在主密钥后面多了个 #。系统会建立一个像是指针的东西,指向智能卡。

然后可以使用 gpg --card-status 看看信息。

公钥传到服务器上

输入密码后,导入完成

当然,我们也可以走另外一条路:

  1. 生成 id_rsa.pub 文件: gpg --export-ssh-key XXXXXXXX > ~/.ssh/id_rsa.pub
  2. 正常登录服务器
  3. 编辑服务器上的 ~/.ssh/authorized_keys 文件,将本地 ~/.ssh/id_rsa.pub 里面的内容贴到此文件末尾
  4. 重启 sshd 服务

这样做的好处是……EC2 之类的服务器默认只能使用 key 来登录,使用 ssh-copy-id 感觉是个死循环……

本地做一点配置

ohmyzsh 里面编辑 .zshrc,开启 gpg-agent 插件

新建 ~/.gnupg/gpg-agent.conf 文件,输入以下内容

Have Fun

登出再登入,或者新开一个 Terminal,如果没有插上 YubiKey,登录服务器的时候会让输入密码,如果插了 YubiKey,第一次会让输入前面设置的 Pin,之后就免密码登录了。

当然,如果前面在本地不删除密钥的话,就可以直接免密码登录了。

小更新:

如果你能看到这里……嗯,其实 Linux 一般都自带一个 密码和密钥 GUI 管理工具的……Debian 下面叫做 seahorse,直接可以可视化操作。

作为二次验证设备

这样就不用每次输入短信验证码啦,只需要把 Key 插上去、摸一下……

这个功能只支持 Chrome 浏览器,而且支持的网站不是特别多。Google、Github、Dropbox 都可以使用。

使用YubiKey作为二次验证设备登录Google

给 Github 提交添加签名

可以按照 这个官方教程 来。

想 Commit 自动签名的话,小小设置一下:

觉得目前看来更多是为了装 13……

本地二次认证

即使知道我的 sudo 密码,也必须插上 Key、摸一下才能 sudo~

首先,安装 u2f-host

然后,使用 pamu2fcfg -u${USER} > ~/.config/Yubico/u2f_keys 并摸一下,以注册设备。(其实会生成一串神秘代码,格式为 <username>:<KeyHandle1>,<UserKey1>

最后,来到 /etc/pam.d,如果想在执行 sudo 的时候加上二次验证,就编辑 sudo,加入 auth sufficient pam_u2f.so。这样输入密码后必须再摸一下才能真正执行。

参考资料

《YubiKey 初使用》上有2条评论

    1. “买了高强度加密设备,发现好像并没有什么值得加密的东西”……

发表评论

电子邮件地址不会被公开。 必填项已用*标注