名称: proton-pass
描述: 管理 Proton Pass 保险库、项目(登录信息、SSH 密钥、别名、笔记)、密码、SSH 代理集成以及将密钥注入应用程序。适用于使用 Proton Pass 进行密码管理、SSH 密钥存储、密钥注入(使用密钥运行命令、注入模板)、环境变量注入或生成安全密码的场景。支持保险库/项目的增删改查、共享、成员管理、SSH 代理操作、TOTP 生成、密钥引用(pass://vault/item/field)、模板注入以及使用密钥执行命令。
通过 Proton Pass CLI 进行全面的密码和密钥管理。管理保险库、项目、SSH 密钥、共享凭据、注入密钥,并与 SSH 工作流集成。
macOS/Linux:
curl -fsSL https://proton.me/download/pass-cli/install.sh | bash
Windows:
Invoke-WebRequest -Uri https://proton.me/download/pass-cli/install.ps1 -OutFile install.ps1; .\install.ps1
brew install protonpass/tap/pass-cli
注意: 包管理器安装(如 Homebrew)不支持 pass-cli update 命令或通道切换。
pass-cli --version
默认的身份验证方法,支持所有登录流程(SSO、U2F):
pass-cli login
# 在浏览器中打开显示的 URL 并完成身份验证
基于终端的身份验证(支持密码 + TOTP,但不支持 SSO 或 U2F):
pass-cli login --interactive user@proton.me
# 明文凭据(安全性较低)
export PROTON_PASS_PASSWORD='your-password'
export PROTON_PASS_TOTP='123456'
export PROTON_PASS_EXTRA_PASSWORD='your-extra-password'
# 或从文件读取(更安全)
export PROTON_PASS_PASSWORD_FILE='/secure/password.txt'
export PROTON_PASS_TOTP_FILE='/secure/totp.txt'
export PROTON_PASS_EXTRA_PASSWORD_FILE='/secure/extra-password.txt'
pass-cli login --interactive user@proton.me
pass-cli info # 显示会话信息
pass-cli test # 测试连接
pass-cli logout # 正常注销
pass-cli logout --force # 如果远程失败,强制本地清理
pass-cli vault list
pass-cli vault list --output json
pass-cli vault create --name "保险库名称"
# 通过共享 ID
pass-cli vault update --share-id "abc123def" --name "新名称"
# 通过名称
pass-cli vault update --vault-name "旧名称" --name "新名称"
⚠️ 警告: 永久删除保险库及其所有项目。
# 通过共享 ID
pass-cli vault delete --share-id "abc123def"
# 通过名称
pass-cli vault delete --vault-name "旧保险库"
# 共享为查看者权限(默认)
pass-cli vault share --share-id "abc123def" colleague@company.com
# 共享为特定角色
pass-cli vault share --vault-name "团队保险库" colleague@company.com --role editor
# 角色:viewer, editor, manager
# 列出成员
pass-cli vault member list --share-id "abc123def"
pass-cli vault member list --vault-name "团队保险库" --output json
# 更新成员角色
pass-cli vault member update --share-id "abc123def" --member-share-id "member123" --role editor
# 移除成员
pass-cli vault member remove --share-id "abc123def" --member-share-id "member123"
pass-cli vault transfer --share-id "abc123def" "member_share_id_xyz"
pass-cli vault transfer --vault-name "我的保险库" "member_share_id_xyz"
# 从特定保险库列出
pass-cli item list "保险库名称"
pass-cli item list --share-id "abc123def"
# 使用默认保险库列出(如果已配置)
pass-cli item list
# 通过 ID
pass-cli item view --share-id "abc123def" --item-id "item456"
# 通过名称
pass-cli item view --vault-name "我的保险库" --item-title "我的项目"
# 使用 Pass URI
pass-cli item view "pass://abc123def/item456"
pass-cli item view "pass://我的保险库/我的项目"
# 查看特定字段
pass-cli item view "pass://abc123def/item456/password"
pass-cli item view --share-id "abc123def" --item-id "item456" --field "username"
# 输出格式
pass-cli item view --share-id "abc123def" --item-id "item456" --output json
# 基础登录
pass-cli item create login \
--share-id "abc123def" \
--title "GitHub 账户" \
--username "myuser" \
--password "mypassword" \
--url "https://github.com"
# 使用保险库名称
pass-cli item create login \
--vault-name "个人" \
--title "账户" \
--username "user" \
--email "user@example.com" \
--url "https://example.com"
# 使用生成的密码
pass-cli item create login \
--share-id "abc123def" \
--title "新账户" \
--username "myuser" \
--generate-password \
--url "https://example.com"
# 自定义密码生成:"长度,大写字母,符号"
pass-cli item create login \
--vault-name "工作" \
--title "安全账户" \
--username "myuser" \
--generate-password="20,true,true" \
--url "https://example.com"
# 生成密码短语
pass-cli item create login \
--share-id "abc123def" \
--title "账户" \
--username "user" \
--generate-passphrase="5" \
--url "https://example.com"
# 获取模板结构
pass-cli item create login --get-template > template.json
# 从模板创建
pass-cli item create login --from-template template.json --share-id "abc123def"
# 从标准输入创建
echo '{"title":"测试","username":"user","password":"pass","urls":["https://test.com"]}' | \
pass-cli item create login --share-id "abc123def" --from-template -
模板格式:
{
"title": "项目标题",
"username": "可选用户名",
"email": "可选邮箱@example.com",
"password": "可选密码",
"urls": ["https://example.com", "https://app.example.com"]
}
# 生成 Ed25519 密钥(推荐)
pass-cli item create ssh-key generate \
--share-id "abc123def" \
--title "GitHub 部署密钥"
# 使用保险库名称
pass-cli item create ssh-key generate \
--vault-name "开发密钥" \
--title "GitHub 部署密钥"
# 生成带注释的 RSA 4096 密钥
pass-cli item create ssh-key generate \
--share-id "abc123def" \
--title "生产服务器" \
--key-type rsa4096 \
--comment "prod-server-deploy"
# 密钥类型:ed25519(默认), rsa2048, rsa4096
# 使用密码短语保护
pass-cli item create ssh-key generate \
--share-id "abc123def" \
--title "安全密钥" \
--password
# 从环境变量获取密码短语
PROTON_PASS_SSH_KEY_PASSWORD="my-passphrase" \
pass-cli item create ssh-key generate \
--share-id "abc123def" \
--title "自动化密钥" \
--password
# 导入未加密密钥
pass-cli item create ssh-key import \
--from-private-key ~/.ssh/id_ed25519 \
--share-id "abc123def" \
--title "我的 SSH 密钥"
# 使用保险库名称导入
pass-cli item create ssh-key import \
--from-private-key ~/.ssh/id_rsa \
--vault-name "个人密钥" \
--title "旧 RSA 密钥"
# 导入受密码短语保护的密钥(将提示输入)
pass-cli item create ssh-key import \
--from-private-key ~/.ssh/id_ed25519 \
--share-id "abc123def" \
--title "受保护密钥" \
--password
# 从环境变量获取密码短语
PROTON_PASS_SSH_KEY_PASSWORD="my-key-passphrase" \
pass-cli item create ssh-key import \
--from-private-key ~/.ssh/id_ed25519 \
--share-id "abc123def" \
--title "自动化导入" \
--password
建议: 对于导入受密码短语保护的密钥,考虑先移除密码短语,因为密钥将在您的保险库中加密:
# 创建未加密副本
cp ~/.ssh/id_ed25519 /tmp/id_ed25519_temp
ssh-keygen -p -f /tmp/id_ed25519_temp -N ""
# 导入
pass-cli item create ssh-key import \
--from-private-key /tmp/id_ed25519_temp \
--share-id "abc123def" \
--title "我的 SSH 密钥"
# 安全删除临时副本
shred -u /tmp/id_ed25519_temp # Linux
rm -P /tmp/id_ed25519_temp # macOS
# 创建别名
pass-cli item alias create --share-id "abc123def" --prefix "newsletter"
pass-cli item alias create --vault-name "个人" --prefix "shopping"
# 使用 JSON 输出
pass-cli item alias create --vault-name "个人" --prefix "temp" --output json
# 更新单个字段
pass-cli item update \
--share-id "abc123def" \
--item-id "item456" \
--field "password=newpassword123"
# 通过保险库名称和项目标题
pass-cli item update \
--vault-name "个人" \
--item-title "GitHub 账户" \
--field "password=newpassword123"
# 更新多个字段
pass-cli item update \
--share-id "abc123def" \
--item-id "item456" \
--field "username=newusername" \
--field "password=newpassword" \
--field "email=newemail@example.com"
# 重命名项目
pass-cli item update \
--vault-name "工作" \
--item-title "旧标题" \
--field "title=新标题"
# 创建/更新自定义字段
pass-cli item update \
--share-id "abc123def" \
--item-id "item456" \
--field "api_key=sk_live_abc123" \
--field "environment=production"
注意: 项目更新不支持 TOTP 或时间字段。请使用其他 Proton Pass 客户端进行这些操作。
⚠️ 警告: 永久删除。
pass-cli item delete --share-id "abc123def" --item-id "item456"
# 共享为查看者权限(默认)
pass-cli item share --share-id "abc123def" --item-id "item456" colleague@company.com
# 共享为编辑者权限
pass-cli item share --share-id "abc123def" --item-id "item456" colleague@company.com --role editor
# 生成项目的所有 TOTP
pass-cli item totp "pass://TOTP 保险库/带TOTP的项目"
# 特定 TOTP 字段
pass-cli item totp "pass://TOTP 保险库/带TOTP的项目/TOTP 1"
# JSON 输出
pass-cli item totp "pass://TOTP 保险库/带TOTP的项目" --output json
# 提取特定值
pass-cli item totp "pass://TOTP 保险库/带TOTP的项目/TOTP 1" --output json | jq -r '.["TOTP 1"]'
# 随机密码(默认设置)
pass-cli password generate random
# 自定义随机密码
pass-cli password generate random --length 20 --numbers true --uppercase true --symbols true
# 无符号的简单密码
pass-cli password generate random --length 16 --symbols false
# 生成密码短语
pass-cli password generate passphrase
# 自定义密码短语
pass-cli password generate passphrase --count 5
pass-cli password generate passphrase --count 4 --separator hyphens
pass-cli password generate passphrase --count 4 --capitalize true --numbers true
# 评估密码
pass-cli password score "mypassword123"
# JSON 输出
pass-cli password score "MySecureP@ssw0rd*" --output json
JSON 输出示例:
{
"numeric_score": 51.666666666666664,
"password_score": "易受攻击",
"penalties": [
"包含常见密码",
"连续字符"
]
}
将 Proton Pass SSH 密钥加载到您现有的 SSH 代理中:
# 加载所有 SSH 密钥
pass-cli ssh-agent load
# 从特定保险库加载
pass-cli ssh-agent load --share-id MY_SHARE_ID
pass-cli ssh-agent load --vault-name MySshKeysVault
前提条件: 确保已定义 SSH_AUTH_SOCK 环境变量。
启动 Proton Pass CLI 作为独立的 SSH 代理:
# 启动代理
pass-cli ssh-agent start
# 从特定保险库启动
pass-cli ssh-agent start --share-id MY_SHARE_ID
pass-cli ssh-agent start --vault-name MySshKeysVault
# 自定义套接字路径
pass-cli ssh-agent start --socket-path /custom/path/agent.sock
# 自定义刷新间隔(默认 3600 秒)
pass-cli ssh-agent start --refresh-interval 7200 # 2 小时
启动后,导出套接字:
export SSH_AUTH_SOCK=/Users/youruser/.ssh/proton-pass-agent.sock
自动保存通过 ssh-add 添加的 SSH 密钥:
# 启用自动创建
pass-cli ssh-agent start --create-new-identities MySshKeysVault
# 在另一个终端中
export SSH_AUTH_SOCK=$HOME/.ssh/proton-pass-agent.sock
ssh-add ~/.ssh/my_new_key
# 密钥现已自动保存到 Proton Pass!
强制密码认证:
ssh-copy-id -o PreferredAuthentications=password -o PubkeyAuthentication=no user@server
使用格式引用密钥:pass://vault/item/field
pass://<vault-identifier>/<item-identifier>/<field-name>
# 通过名称
pass://工作/GitHub 账户/password
pass://个人/邮箱登录/username
# 通过 ID
pass://AbCdEf123456/XyZ789/password
pass://ShareId123/ItemId456/api_key
# 混合(保险库通过名称,项目通过 ID)
pass://工作/XyZ789/password
# 自定义字段(区分大小写)
pass://工作/API 密钥/api_key
pass://生产/数据库/connection_string
username - 用户名/登录名password - 密码email - 邮箱地址url - 网站 URLnote - 附加备注totp - TOTP 密钥(用于 2FA)无效格式:
```bash
pass://vault/item # 缺少字段名
pass://vault/item/