2012 年,那时刚接触 OTP,客户端除了 Google Authenticator,其它的几乎就没有。
每次一换手机,就接受一次教训——OTP 账号没备份,丢了。
2016 年之后,换上了 Authy,他能在云端保存 OTP 账号,很爽。

但是呢,OTP 账号保存在云端,还是有一点点不妥的。
这点小功能,为什么 Google 不做,可能也是出于这种考虑吧。
好了,随他们去吧。

对热爱命令行的人来说,密码管理工具,比 pass 更好用的,应该没有了吧。
有我也不用了。
命令行,纯文本,本地存储,基于老牌 GnuPG,支持 OTP,有浏览器插件,有手机客户端。
还要什么自行车。

让这些密码管理和 OTP 工具,爱咋咋的吧。

介绍

  • 设计场景是命令行,命令行用户自然是一等公民
  • 作者社区和 dwm 有关,dwm 是 awesome 的爸爸
  • 数据(密码和OTP)本地化存储,不依赖云端更安全
  • 可复原 OTP 二维码,便于其它设备绑定 (这正是云端存储不安全的原因)
  • 纯文本设计,除密码外,还支持二进制数据,用途广泛
  • 提供了众多的导入工具,方便密码数据的迁移

备份还原

GnuPG 密钥是关键,做好私钥的备份和验证

  • 备份
    % gpg -o security --export-options backup --export-secret-keys YOUR_ID
    
  • 还原
      # 另一个设备
    % gpg --import-options restore --import security
    
  • 还原后信任
      # 另一个设备
    % gpg --edit-key YOUR_ID
    ...(略)
    trust
    5
    quit
    

增删改查

  1# 新添一个密码(指定密码)
% pass insert foo/bar1
  2# 新添一个密码(随机密码)
% pass generate foo/bar2
  3# 编辑密码文件
% pass edit foo/bar1
  4# 移动密码位置(或者重命名)
% pass mv foo/bar1 foo/bar3
  5# 显示密码文件内容
% pass foo/bar3
% pass show foo/bar3
  6# 复制密码(文件首行)
% pass -c foo/bar3
  7# 复制文件的第二行
% pass -c2 foo/bar3
  8# 查找密码文件名
% pass find bar
  9# 查找密码文件内容
% pass grep 的地得

OTP

  #1
% zbarimg -q --raw qrcode.png | pass otp append xxx/foo
  #2
% pass otp xxx/foo
  #3
% pass otp uri -q xxx/foo
  1. 从二维码注册 OTP
    qrcode.png 是二维码截图文件,append 表示追加到已有的 xxx/foo 密码文件
  2. 使用 OTP,显示当前的 OTP 密码。可加 -c 参数,复制到剪贴板
  3. 分享 OTP 的二维码
    基于已有的 OTP 信息,生成二维码图片,方便其他人在其它设备上再次绑定

更多

  • 管理二进制文件(以图片为例)

      1# 【保存】将图片 `/tmp/test-image.png` 存入 `image/test.png` 密码中
    % cat /tmp/test-image.png | pass insert -m image/test.png
      2# 【复原】将密码 `image/test.png` 还原为图片文件 `/tmp/new-image.png`
    % pass show test-image > /tmp/new-image.png
    
  • 懒得开命令行终端
    如果连命令行窗口都懒得开,试试 passmenu。设定一个全局快捷键,效果杠杠的。

  • 登录信息自动填充
    基于 xdotool,可参考 passmenu 以及这里的讨论,以后再研究~

  • 团队协作密码共享
    pass 可以按目录指定不同的 .gpg-id。对于团队内可共享的密码,指定公共的 .gpg-id。不可共享的密码,则指定私密的 .gpg-id。具体可参考这里的实践