pass
来自 官方网站
- 密码管理应当简单并遵循 Unix 哲学。使用 pass,每个密码都存在于一个 gpg 加密文件中,该文件的文件名是需要密码的网站或资源的标题。这些加密文件可以组织成有意义的文件夹层次结构,从一台计算机复制到另一台计算机,并且通常可以使用标准命令行文件管理实用程序进行操作。
pass 是一个简单的命令行密码管理器。pass 是一个 shell 脚本,它利用了现有的工具,例如 GnuPG、tree 和 Git。
安装
基本用法
要初始化密码存储
$ pass init gpg-id_or_email
要创建新密码,首先提供一个描述性的分层名称。在此示例中,它是archlinux.org/wiki/username
$ pass insert archlinux.org/wiki/username
要查看密码存储,请执行以下操作。请注意示例输出,其中显示了我们刚刚创建的层次结构
$ pass
Password Store └── archlinux.org └── wiki └── username
要为上述示例生成新的随机密码,请执行以下操作,其中 n
是所需的密码长度(数字)
$ pass generate archlinux.org/wiki/username n
要检索密码,请在以下提示符处输入 gpg 密码短语,再次使用上面的示例名称
$ pass archlinux.org/wiki/username
安装了 xclip 的 Xorg 用户可以将密码直接检索到剪贴板上(例如,粘贴到 Web 表单中)。在 Wayland 会话中,应使用 wl-clipboard 代替。为此,请执行以下操作(同样使用上面相同的分层名称)
$ pass -c archlinux.org/wiki/username
export PASSWORD_STORE_X_SELECTION=primary
pass 附带一个 dmenu 包装器,以实现轻松搜索/复制。要使用它,请安装可选依赖项 dmenu 并运行
$ passmenu
然后,选择一个条目将将其密码复制到剪贴板。有关自定义选项(例如不区分大小写)的信息,请参阅 dmenu(1)。您可能希望将其设置为系统范围的快捷键,以便从任何应用程序轻松访问密码。
数据组织
默认情况下,使用 pass insert
创建的凭据文件将仅包含您的密码。但是,这可能不够,因为某些应用程序会要求提供详细数据,例如用户名、URL 等。您可以使用命令 pass edit password_name
以您想要的方式编辑现有文件。以下是 pass-project 页面提供的首选组织方案。当使用选项 -c
或 --clip
与此方案结合使用时,只会复制密码。
YwrZSNH35z164ym9pI URL: *.amazon.com/* Username: AmazonianChicken@example.com Secret Question 1: What is your childhood best friend's most bizarre superhero fantasy? Oh god, Amazon, it's too awful to say... Phone Support PIN #: 84719
迁移到 pass
在 pass-project 页面上列出了多个脚本,用于从其他程序导入密码
扩展
自 1.7 版本起,pass 支持社区开发的扩展。这些扩展通过支持新命令来扩展 pass 的功能。
- pass-tomb — 管理加密在 tomb 内的整个密码存储树。
- pass-otp — 支持一次性密码 (OTP) 令牌。
- pass-import — 一个通用的从其他密码管理器导入的工具。
- pass-update — 一个用于更新密码的简易流程。
- pass-audit — 用于审计密码仓库的扩展。
- pass-coffin — 一个密码存储扩展,用于将数据隐藏在签名和加密的 coffin 中
- pass-tessen — 一个与 Xorg/Wayland 兼容的命令行模糊选择工具,带有复制和粘贴功能。
- tessen — 一个用于 Wayland 的 bash 脚本,扩展了对 dmenu 类型应用程序(如 rofi 和 fuzzel)的兼容性。
高级用法
环境变量 可用于更改 pass 查找存储和 git 操作的位置,通过
PASSWORD_STORE_DIR=/path/to/store
有关如何使用此功能来支持多个 pass 仓库的更多信息,请参阅 此链接。以下 pw()
示例别名将命名数据库的第二行发送到剪贴板,然后在五秒钟后发送第一行,最后在五秒钟后发送 OTP 代码。假设密码占用第一行,用户名占用第二行,并且 OTP URI 存在于命名数据库中的任何位置,则最终效果是连续将用户名 > 密码 > otp 代码粘贴到可用的(例如,浏览器)条目字段中
pw() { export PASSWORD_STORE_CLIP_TIME=8 export PASSWORD_STORE_X_SELECTION=primary pass -c2 $1; sleep 5; pass -c $1; sleep 5; pass otp -c $1; exit }
多 pass 上下文 (例如,团队协作)
可以使用别名来设置不同的 pass 上下文,这有助于与不同的团队协作。我们已经在 bash 中实现了以下功能
将别名添加到您的 ~/.bashrc
alias passred="PASSWORD_STORE_DIR=~/.pass/red pass" alias passblue="PASSWORD_STORE_DIR=~/.pass/blue pass"
将这些别名添加到您的 ~/.bash_completion
中,并确保安装了 bash-completion
source /usr/share/bash-completion/completions/pass _passred(){ PASSWORD_STORE_DIR=~/.pass/red/ _pass } complete -o filenames -o nospace -F _passred passred _passblue(){ PASSWORD_STORE_DIR=~/.pass/blue/ _pass } complete -o filenames -o nospace -F _passblue passblue
或用于 zsh (来源: /usr/share/zsh/site-functions/_pass
)
compdef _pass passred zstyle ':completion::complete:passred::' prefix "$HOME/.pass/red" passred() { PASSWORD_STORE_DIR=$HOME/.pass/red pass $@ } compdef _pass passblue zstyle ':completion::complete:passblue::' prefix "$HOME/.pass/blue" passblue() { PASSWORD_STORE_DIR=$HOME/.pass/blue pass $@ }
现在,您可以初始化到 ~/.pass/red
和 ~/.pass/blue
中,并使用 passred
和 passblue
别名拥有两个 pass 上下文。您可以将其进一步推广到任意数量的上下文。
Git 集成
Git 助手用法
您可以将 pass
用作 git
的凭据助手。安装 pass-git-helperAUR。详细信息请参见 github README 文件。
git 配置
通过调用以下命令将 pass-git-helper
配置为 git 凭据助手
$ git config --global credential.helper /usr/bin/pass-git-helper
映射文件
创建文件 ~/.config/pass-git-helper/git-pass-mapping.ini
。它用于将 git 远程主机映射到您的 pass
数据库。格式如下所示
[github.com] target=dev/github [*.fooo-bar.*] target=dev/fooo-bar
您可以在主机部分中使用通配符,如示例所示。
密码存储布局
与 pass 一样,助手假定密码包含在密码存储条目的第一行中。此外,如果存在第二行,则该行将被解释为用户名。
为此,您必须使用 pass insert --multiline
创建多行密码存储条目。
用于 pass 的中央 Git 服务器与 GnuPG 结合使用 (SSH 示例)
您可以通过设置一个用于 pass 的中央 Git 服务器来设置密码管理系统。这允许您通过多个客户端环境同步您的中央密码仓库。
在服务器上安装一个用于 pass 的裸 Git 仓库
在服务器上运行 git init --bare ~/.password-store
以创建一个您可以推送到的裸仓库。
导入授权的公钥 SSH 密钥
在客户端
本节假定您已配置 GnuPG 并拥有用于加密密码的密钥对。在您的本地客户端上,确保您在客户端上有一个本地密码存储,然后启用通过 Git 管理本地更改,添加您的远程 Git 仓库,并推送您的本地 pass 历史记录。
创建一个本地密码存储
$ pass init gpg_key_id
启用通过 Git 管理本地更改
$ pass git init
将远程 git 仓库添加为“origin”
$ pass git remote add origin user@server:~/.password-store
推送您的本地 pass 历史记录
$ pass git push -u --all
现在您可以使用标准 Git 命令,以 pass
为前缀。例如:pass git push
或 pass git pull
。当您使用 pass 修改密码存储时,pass 将自动创建提交。
故障排除
加密失败:无法使用的公钥
尝试插入新条目时可能会发生以下错误
$ pass insert archlinux.org/wiki/username
Enter password for archlinux.org/wiki/username: Retype password for archlinux.org/wiki/username: gpg: XXXXXXXXX: There is no assurance this key belongs to the named user gpg: [stdin]: encryption failed: Unusable public key Password encryption aborted.
如果 GnuPG 密钥的信任级别设置为“完全信任”以外的任何级别,则会发生这种情况。编辑用于 pass
的密钥,将其信任级别设置为“完全信任”
$ gpg --edit-key your_key_id
> trust > 5