4

使用 pass 管理密码

 3 years ago
source link: https://blog.ruo-chen.wang/2021/01/pass.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Pass 是一个使用 GPG 管理密码的工具。它的 网站 介绍说:

Pass: the standard unix password manager

有 ed 编辑器内味了1

Pass 保存的密码被存放在目录 ${PASSWORD_STORE_DIR:-$HOME/.password-store} 下,每个密码都是一个 GPG 加密的文件。除了密码还可以在此文件中存放用户名,OTP URI 等其它信息。同时还可以把该目录作为一个 Git 仓库用于同步密码。

生成 GPG 密钥Permalink

如果没有 GPG 密钥对则需要先生成。使用命令

gpg --full-gen-key

输入对应的信息即可,一般都可以用默认值。关于生成 GPG 密钥还可以看看 ArchWiki。为了避免每次需要密码的时候都得输入 GPG 密钥的密码,可以配置 GNOME Keyring 或者 pam-gnupg 来在登录后记住密码。

pass 命令Permalink

首先用生成 GPG 密钥的 email 初始化 pass:

pass init ${GPGEMAIL?}

添加密码Permalink

使用命令 pass insert email/fastmail,输入两遍密码即可添加 email/fastmail 的密码。当密码的名字带有 / 时会将密码文件存放在对应的子目录下。运行 pass 或者 pass ls 可以看到目前存储了哪些密码:

$ pass ls
Password Store
└── email
    └── fastmail

生成密码Permalink

使用 pass generate website 16 来生成一个长度为 16 的密码并保存为 website。可以加上 -n 选项生成不带特殊符号的密码。

$ pass generate website 16 -n
The generated password for website is:
yKGhEkei98fGRKY6

获取密码Permalink

获取 email/fastmail 的密码的方法是运行 pass email/fastmail,或者加上 -c 选项将密码复制到剪贴板,此密码会在 45 秒后从剪贴板消失。注意如果密码文件有多行(如还存放了用户名等其它信息时),此命令只复制第一行。

操作密码文件Permalink

pass mvpass cppass rmpass edit 对密码文件进行相应的操作。

使用 GitPermalink

可以使用 git 来同步密码。在对应的 git 命令前添加 pass 即可直接操作 pass 的 git 仓库。如

pass git init
pass git remote add origin [email protected]:password-store.git
pass git push -u origin master

为了安全还可以配置一个自己的 Git 服务器,见 搭建一个 Git 服务器

清除 dangling commitsPermalink

有时想要重写 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

使用场景Permalink

我使用 pass 的主要场景是在脚本中获取密码,或者用于在配置文件中使用 pass 命令获取密码。这样做可以防止直接在配置中明文填写密码。如在 neomutt 中配置帐号时:

set my_pass = "`pass show email/foo | head -1`"
set smtp_pass = $my_pass

Pass 还可在浏览器中使用(Firefox 扩展 passff,Chrome 扩展 browserpass

Pass 的扩展Permalink

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。

其它的扩展见官网的 列表

iOSPermalink

Pass 在其它平台上都有客户端,在 iOS 中有 passforios。它有一些扩展功能,比如可在密码文件的第一行之后使用 key: value 的形式存放其他信息,如用户名等,可以方便地查看和复制这些额外信息。它也可以添加 OTP URI 以获取 OTP code。



About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK