跳转至内容

pass

来自 ArchWiki

来自 官方网站

密码管理应该简单并遵循 Unix 哲学。使用 pass,每个密码都存储在一个 gpg 加密的文件中,文件名是需要该密码的网站或资源的标题。这些加密文件可以组织成有意义的文件夹层级,从一台计算机复制到另一台计算机,并且通常可以使用标准的命令行文件管理实用程序进行操作。

pass 是一个简单的命令行密码管理器。pass 是一个 shell 脚本,它利用了 GnuPGtreeGit 等现有工具。

安装

安装 pass 包。

可选的 Qt GUI 可通过 qtpass 包获得。

基本用法

注意 要使用 pass,请先设置好 GnuPG。用于 pass 的密钥的信任级别必须是“ultimate”。

初始化密码存储

$ 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 用户可以将密码临时检索到剪贴板(例如,粘贴到网页表单)。在 Wayland 会话中,应改用 wl-clipboard。要做到这一点,请执行以下操作(再次使用上面相同的示例层级名称)

$ pass -c archlinux.org/wiki/username
注意 偏好传统中键点击/粘贴的用户可以将以下内容添加到各自的 ~/.shellrc 中以实现此行为:export PASSWORD_STORE_X_SELECTION=primary

pass 自带了一个 dmenu 包装器,可以方便地进行搜索/复制。要使用它,请安装可选依赖项 dmenu 并运行

$ passmenu

然后选择一个条目将复制其密码到剪贴板。有关自定义选项(例如不区分大小写)的更多信息,请参阅 dmenu(1)。您可能希望将其设置为系统范围的键盘绑定,以便从任何应用程序轻松访问密码。

数据组织

默认情况下,使用 pass insert 创建的凭据文件仅包含您的密码。但是,这可能不够,因为许多应用程序会要求详细信息,如用户名、URL 等。您可以使用 pass edit password_name 命令以您想要的方式编辑现有文件。以下是 pass 项目页面提供的首选组织方案。当使用 -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 项目页面 上列出了多个用于从其他程序导入密码的脚本。

扩展

自 1.7 版本起,pass 支持社区开发的扩展。这些扩展通过支持新命令来扩展 pass 的功能。

  • pass-tomb — 管理存储在 tomb 中的整个密码存储树。
https://github.com/roddhjav/pass-tomb || pass-tombAUR
  • pass-otp — 支持一次性密码 (OTP) 令牌。
https://github.com/tadfisher/pass-otp || pass-otp
  • pass-import — 一个通用的从其他密码管理器导入工具。
https://github.com/roddhjav/pass-import || pass-importAUR
  • pass-update — 一个轻松更新密码的流程。
https://github.com/roddhjav/pass-update || pass-updateAUR
  • pass-audit — 一个用于审计密码存储的扩展。
https://github.com/roddhjav/pass-audit || pass-auditAUR
  • pass-phrase — 一个生成密码短语的扩展。
https://github.com/programadoroccidental/pass-phrase || pass-phraseAUR
  • pass-coffin — 一个密码存储扩展,用于将数据隐藏在一个签名和加密的 coffin 中。
https://github.com/ayushnix/pass-coffin || pass-coffinAUR
  • pass-tessen — 一个 Xorg/Wayland 兼容的命令行模糊选择工具,支持复制和粘贴。
https://github.com/ayushnix/pass-tessen || pass-tessenAUR
  • tessen — 一个用于 Wayland 的 bash 脚本,扩展了对 rofi 和 fuzzel 等 dmenu 类型应用程序的兼容性。
https://github.com/ayushnix/tessen || tessenAUR

高级用法

环境变量 可用于更改 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 补全,并确保安装了 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,并拥有两个 pass 上下文,通过 passredpassblue 别名。您可以将此进一步泛化到任意数量的上下文。

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 来创建一个多行密码存储条目。

与 GnuPG 结合使用的中央 Git 服务器 (SSH 示例)

通过设置一个中央 Git 服务器来管理 pass,您可以建立一个密码管理系统。这使您可以在多个客户端环境中同步您的中央密码存储。

在服务器上安装一个空的 Git 仓库用于 pass

在服务器上运行 git init --bare ~/.password-store 来创建一个可以推送的空仓库。

导入已授权的公钥 SSH 密钥

请参阅 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 pushpass git pull。当您使用 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.

如果用于 pass 的 GnuPG 密钥的信任级别设置为“ultimate”以外的任何级别,就会发生这种情况。编辑用于 pass 的密钥以将其信任级别设置为“ultimate”。

$ gpg --edit-key your_key_id
> trust
> 5

密钥已过期

当您的 GPG 密钥过期时(例如,一年后)并且您尝试添加新密码时,可能会出现以下错误。

gpg: Note: secret key 0xAAAABBBBCCCCDDEE expired at Thu 09 Jan 2020 01:15:15 PM UTC
gpg: AAAABBBBCCCCDDEE: skipped: Unusable public key

要解决此问题,请 延长当前 GPG 密钥的过期日期 或切换到新密钥(即密钥轮换)。

切换到新密钥并重新加密存储

$ pass init new_gpg-id_or_email

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.