惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Secure Thoughts
Security Latest
Security Latest
Simon Willison's Weblog
Simon Willison's Weblog
O
OpenAI News
GbyAI
GbyAI
L
LINUX DO - 最新话题
A
Arctic Wolf
T
Tor Project blog
G
GRAHAM CLULEY
I
InfoQ
博客园_首页
IT之家
IT之家
The Register - Security
The Register - Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
The GitHub Blog
The GitHub Blog
Blog — PlanetScale
Blog — PlanetScale
N
Netflix TechBlog - Medium
K
Kaspersky official blog
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
U
Unit 42
PCI Perspectives
PCI Perspectives
量子位
P
Palo Alto Networks Blog
S
Securelist
T
Troy Hunt's Blog
博客园 - 【当耐特】
Recorded Future
Recorded Future
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
Security Affairs
Engineering at Meta
Engineering at Meta
T
The Blog of Author Tim Ferriss
博客园 - 聂微东
罗磊的独立博客
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
B
Blog RSS Feed
NISL@THU
NISL@THU
C
Cisco Blogs
T
Threatpost
有赞技术团队
有赞技术团队
Forbes - Security
Forbes - Security
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
T
The Exploit Database - CXSecurity.com
Cloudbric
Cloudbric
Cyberwarzone
Cyberwarzone
Google DeepMind News
Google DeepMind News
C
Cyber Attacks, Cyber Crime and Cyber Security

weirane’s blog

开始读《异见时刻》 中美文化差异 关于基于表达式的编程语言的一些思考 使用 bwrap 隔离 WPS Office 从零开始的 λ 演算 从 Manjaro 迁移到 Arch Linux 更换域名 搭建一个 Git 服务器 Fcitx5 安装记
使用 pass 管理密码
weirane · 2021-01-09 · via weirane’s blog

4 minute read

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

Pass: the standard unix password manager

有 ed 编辑器内味了1

Pass 保存的密码被存放在目录 ${PASSWORD_STORE_DIR:-$HOME/.password-store} 下,每个密码都是一个 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 mvpass cppass rmpass 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。