使用 pass 管理密码
Pass 是一个使用 GPG 管理密码的工具。它的 网站 介绍说:
Pass: the standard unix password manager
有 ed 编辑器内味了1
Pass 保存的密码被存放在目录 ${PASSWORD_
下,每个密码都是一个 GPG 加密的文件。除了密码还可以在此文件中存放用户名,OTP
URI 等其它信息。同时还可以把该目录作为一个 Git 仓库用于同步密码。
生成 GPG 密钥
如果没有 GPG 密钥对则需要先生成。使用命令
gpg --full-gen-key
输入对应的信息即可,一般都可以用默认值。关于生成 GPG 密钥还可以看看 ArchWiki。为了避免每次需要密码的时候都得输入 GPG 密钥的密码,可以配置 GNOME Keyring 或者 pam-gnupg 来在登录后记住密码。
pass
命令
首先用生成 GPG 密钥的 email 初始化 pass:
pass init ${GPGEMAIL?}
添加密码
使用命令 pass insert email/fastmail
,输入两遍密码即可添加 email/fastmail
的密码。当密码的名字带有 /
时会将密码文件存放在对应的子目录下。运行 pass
或者
pass ls
可以看到目前存储了哪些密码:
$ pass ls
Password Store
└── email
└── fastmail
生成密码
使用 pass generate website 16
来生成一个长度为 16 的密码并保存为 website
。可以加上 -n
选项生成不带特殊符号的密码。
$ pass generate website 16 -n
The generated password for website is:
yKGhEkei98fGRKY6
获取密码
获取 email/fastmail
的密码的方法是运行 pass email/fastmail
,或者加上 -c
选项将密码复制到剪贴板,此密码会在 45 秒后从剪贴板消失。注意如果密码文件有多行(如还存放了用户名等其它信息时),此命令只复制第一行。
操作密码文件
用 pass mv
,pass cp
,pass rm
,pass edit
对密码文件进行相应的操作。
使用 Git
可以使用 git 来同步密码。在对应的 git
命令前添加 pass
即可直接操作 pass 的
git 仓库。如
pass git init
pass git remote add origin git@git.example.com:password-store.git
pass git push -u origin master
为了安全还可以配置一个自己的 Git 服务器,见 搭建一个 Git 服务器。
清除 dangling commits
有时想要重写 commit 历史,但是旧 commit 并不会被清除:
$ git fsck --full
Checking object directories: 100% (256/256), done.
Checking objects: 100% (26/26), done.
dangling commit b876e31a2740da9198c851532ce9a83ccaa71d21
dangling commit 74e9cfda669d39ef8154270fcc8e14e8247b7c05
此时可以使用如下命令来清除这些 commit。
git reflog expire --expire=now --all
git gc --prune=now
使用场景
我使用 pass 的主要场景是在脚本中获取密码,或者用于在配置文件中使用 pass 命令获取密码。这样做可以防止直接在配置中明文填写密码。如在 neomutt 中配置帐号时:
set my_pass = "`pass show email/foo | head -1`"
set smtp_pass = $my_pass
Pass 还可在浏览器中使用(Firefox 扩展 passff,Chrome 扩展 browserpass)
Pass 的扩展
Pass 有许多扩展以增强其功能。例如可以通过 pass-otp 来使用 OTP:
- 添加 OTP URI:
pass otp add email/fastmail
- 获取 OTP code:
pass otp email/fastmail
虽然密码文件会被 GPG 加密,但是密码库的目录结构和文件名都是不加密的,任何人都可以查看。可以使用 pass-tomb 解决这个问题。它将密码存放在一个 tomb 中,查看密码前需要使用 pass open
将 tomb 打开,查看完毕后再使用 pass close
关闭
tomb。
其它的扩展见官网的 列表。
iOS
Pass 在其它平台上都有客户端,在 iOS 中有 passforios。它有一些扩展功能,比如可在密码文件的第一行之后使用 key: value
的形式存放其他信息,如用户名等,可以方便地查看和复制这些额外信息。它也可以添加 OTP URI 以获取 OTP code。