Pass 凭据管理器
基于 pass 的标准 Unix 密码管理方案。
核心架构
~/.password-store/ # GPG 加密的密码库
├── .gpg-id # GPG 密钥 ID
├── .git/ # Git 版本控制
├── llm/api-key.gpg # LLM API Key
├── postgres/ # 数据库密码
├── qq-mail/ # 邮箱授权码
└── weixin/ # 微信推送 ID
安全特性:
- GPG 对称加密(AES256)
- Git 私有仓库备份
- 本地存储,无云端依赖
常用命令
读取凭据
pass show <path> # 显示完整内容
pass show -c <path> # 复制到剪贴板 (45s 后清除)
存储凭据
pass insert <path> # 交互式输入
pass insert -m <path> # 多行内容 (如配置文件)
pass edit <path> # 编辑器打开
管理
pass ls # 列出所有
pass find <keyword> # 搜索
pass rm <path> # 删除
pass mv <old> <new> # 重命名/移动
标准路径命名
| 服务类型 | 路径示例 |
|---|---|
| LLM API | llm/api-key |
| 数据库 | postgres/<db>-password |
| 邮箱 | <provider>-mail/auth-code |
| 推送服务 | <service>/user-id |
| 云服务 | <provider>/access-key |
在脚本中使用
Bash
API_KEY=$(pass show llm/api-key)
DB_PASS=$(pass show postgres/stock_market-password)
Python
import subprocess
def get_credential(path: str) -> str:
result = subprocess.run(
["pass", "show", path],
capture_output=True, text=True
)
if result.returncode != 0:
raise RuntimeError(f"Failed to get credential: {path}")
return result.stdout.strip()
api_key = get_credential("llm/api-key")
初始化新环境
# 1. 安装 pass
apt install pass # Debian/Ubuntu
brew install pass # macOS
# 2. 克隆密码库
git clone <私有仓库> ~/.password-store
# 3. 验证 GPG 密钥
gpg --list-keys
备份与恢复
备份到 Git
cd ~/.password-store
git add -A && git commit -m "Update credentials" && git push
自动备份
建议配置 cron 或 hook 在 pass insert/pass edit 后自动提交。
最佳实践
- 路径分类 - 按服务/用途分层组织
- 多行存储 - 复杂配置用
pass insert -m - 定期同步 -
git pull获取最新变更 - 权限控制 -
chmod 700 ~/.password-store - 禁止硬编码 - 永远不要在代码中写入明文密码
禁止事项
- ❌ 在聊天/日志/代码生成中粘贴真实密钥
- ❌ 将密码库推送到公开仓库
- ❌ 在 CI/CD 日志中打印
pass show输出