Proton Pass CLI技能使用说明
Proton Pass 命令行界面
通过 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
Homebrew (macOS)
brew install protonpass/tap/pass-cli
注意:通过包管理器安装(如 Homebrew 等)不支持pass-cli update命令或切换跟踪通道。
验证安装
pass-cli --version
身份验证
网页登录(推荐)
默认的身份验证方法,支持所有登录流程(SSO、U2F):
pass-cli login
# Open the URL displayed in your browser and complete authentication
交互式登录
基于终端的身份验证(支持密码 + TOTP,但不支持 SSO 或 U2F):
pass-cli login --interactive user@proton.me
用于自动化的环境变量
# Credentials as plain text (less secure)
export PROTON_PASS_PASSWORD='your-password'
export PROTON_PASS_TOTP='123456'
export PROTON_PASS_EXTRA_PASSWORD='your-extra-password'
# Or from files (more secure)
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 # Show session info
pass-cli test # Test connection
注销
pass-cli logout # Normal logout
pass-cli logout --force # Force local cleanup if remote fails
保险库管理
列出所有保险库
pass-cli vault list
pass-cli vault list --output json
创建保险库
pass-cli vault create --name "Vault Name"
更新保险库
# By share ID
pass-cli vault update --share-id "abc123def" --name "New Name"
# By name
pass-cli vault update --vault-name "Old Name" --name "New Name"
删除保险库
⚠️警告:永久删除保险库及其中的所有项目。
# By share ID
pass-cli vault delete --share-id "abc123def"
# By name
pass-cli vault delete --vault-name "Old Vault"
分享保险库
# Share with viewer access (default)
pass-cli vault share --share-id "abc123def" colleague@company.com
# Share with specific role
pass-cli vault share --vault-name "Team Vault" colleague@company.com --role editor
# Roles: viewer, editor, manager
管理保险库成员
# List members
pass-cli vault member list --share-id "abc123def"
pass-cli vault member list --vault-name "Team Vault" --output json
# Update member role
pass-cli vault member update --share-id "abc123def" --member-share-id "member123" --role editor
# Remove member
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 "My Vault" "member_share_id_xyz"
项目管理
列出项目
# List from specific vault
pass-cli item list "Vault Name"
pass-cli item list --share-id "abc123def"
# List with default vault (if configured)
pass-cli item list
查看项目
# By IDs
pass-cli item view --share-id "abc123def" --item-id "item456"
# By names
pass-cli item view --vault-name "MyVault" --item-title "MyItem"
# Using Pass URI
pass-cli item view "pass://abc123def/item456"
pass-cli item view "pass://MyVault/MyItem"
# View specific field
pass-cli item view "pass://abc123def/item456/password"
pass-cli item view --share-id "abc123def" --item-id "item456" --field "username"
# Output format
pass-cli item view --share-id "abc123def" --item-id "item456" --output json
创建登录项目
# Basic login
pass-cli item create login \
--share-id "abc123def" \
--title "GitHub Account" \
--username "myuser" \
--password "mypassword" \
--url "https://github.com"
# With vault name
pass-cli item create login \
--vault-name "Personal" \
--title "Account" \
--username "user" \
--email "user@example.com" \
--url "https://example.com"
# With generated password
pass-cli item create login \
--share-id "abc123def" \
--title "New Account" \
--username "myuser" \
--generate-password \
--url "https://example.com"
# Custom password generation: "length,uppercase,symbols"
pass-cli item create login \
--vault-name "Work" \
--title "Secure Account" \
--username "myuser" \
--generate-password="20,true,true" \
--url "https://example.com"
# Generate passphrase
pass-cli item create login \
--share-id "abc123def" \
--title "Account" \
--username "user" \
--generate-passphrase="5" \
--url "https://example.com"
登录模板
# Get template structure
pass-cli item create login --get-template > template.json
# Create from template
pass-cli item create login --from-template template.json --share-id "abc123def"
# Create from stdin
echo '{"title":"Test","username":"user","password":"pass","urls":["https://test.com"]}' | \
pass-cli item create login --share-id "abc123def" --from-template -
模板格式:
{
"title": "Item Title",
"username": "optional_username",
"email": "optional_email@example.com",
"password": "optional_password",
"urls": ["https://example.com", "https://app.example.com"]
}
创建SSH密钥项目
生成新的SSH密钥
# Generate Ed25519 key (recommended)
pass-cli item create ssh-key generate \
--share-id "abc123def" \
--title "GitHub Deploy Key"
# Using vault name
pass-cli item create ssh-key generate \
--vault-name "Development Keys" \
--title "GitHub Deploy Key"
# Generate RSA 4096 key with comment
pass-cli item create ssh-key generate \
--share-id "abc123def" \
--title "Production Server" \
--key-type rsa4096 \
--comment "prod-server-deploy"
# Key types: ed25519 (default), rsa2048, rsa4096
# With passphrase protection
pass-cli item create ssh-key generate \
--share-id "abc123def" \
--title "Secure Key" \
--password
# Passphrase from environment
PROTON_PASS_SSH_KEY_PASSWORD="my-passphrase" \
pass-cli item create ssh-key generate \
--share-id "abc123def" \
--title "Automated Key" \
--password
导入现有SSH密钥
# Import unencrypted key
pass-cli item create ssh-key import \
--from-private-key ~/.ssh/id_ed25519 \
--share-id "abc123def" \
--title "My SSH Key"
# Import with vault name
pass-cli item create ssh-key import \
--from-private-key ~/.ssh/id_rsa \
--vault-name "Personal Keys" \
--title "Old RSA Key"
# Import passphrase-protected key (will prompt)
pass-cli item create ssh-key import \
--from-private-key ~/.ssh/id_ed25519 \
--share-id "abc123def" \
--title "Protected Key" \
--password
# Passphrase from environment
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 "Automated Import" \
--password
建议:对于导入受密码保护的密钥,建议先移除密码,因为密钥将在您的保险库中加密:
# Create unencrypted copy
cp ~/.ssh/id_ed25519 /tmp/id_ed25519_temp
ssh-keygen -p -f /tmp/id_ed25519_temp -N ""
# Import
pass-cli item create ssh-key import \
--from-private-key /tmp/id_ed25519_temp \
--share-id "abc123def" \
--title "My SSH Key"
# Securely delete temp copy
shred -u /tmp/id_ed25519_temp # Linux
rm -P /tmp/id_ed25519_temp # macOS
创建电子邮件别名
# Create alias
pass-cli item alias create --share-id "abc123def" --prefix "newsletter"
pass-cli item alias create --vault-name "Personal" --prefix "shopping"
# With JSON output
pass-cli item alias create --vault-name "Personal" --prefix "temp" --output json
更新项目
# Update single field
pass-cli item update \
--share-id "abc123def" \
--item-id "item456" \
--field "password=newpassword123"
# By vault name and item title
pass-cli item update \
--vault-name "Personal" \
--item-title "GitHub Account" \
--field "password=newpassword123"
# Update multiple fields
pass-cli item update \
--share-id "abc123def" \
--item-id "item456" \
--field "username=newusername" \
--field "password=newpassword" \
--field "email=newemail@example.com"
# Rename item
pass-cli item update \
--vault-name "Work" \
--item-title "Old Title" \
--field "title=New Title"
# Create/update custom fields
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"
分享项目
# Share with viewer access (default)
pass-cli item share --share-id "abc123def" --item-id "item456" colleague@company.com
# Share with editor access
pass-cli item share --share-id "abc123def" --item-id "item456" colleague@company.com --role editor
生成TOTP验证码
# Generate all TOTPs for an item
pass-cli item totp "pass://TOTP vault/WithTOTPs"
# Specific TOTP field
pass-cli item totp "pass://TOTP vault/WithTOTPs/TOTP 1"
# JSON output
pass-cli item totp "pass://TOTP vault/WithTOTPs" --output json
# Extract specific value
pass-cli item totp "pass://TOTP vault/WithTOTPs/TOTP 1" --output json | jq -r '.["TOTP 1"]'
密码生成与分析
生成密码
# Random password (default settings)
pass-cli password generate random
# Custom random password
pass-cli password generate random --length 20 --numbers true --uppercase true --symbols true
# Simple password without symbols
pass-cli password generate random --length 16 --symbols false
# Generate passphrase
pass-cli password generate passphrase
# Custom 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
分析密码强度
# Score a password
pass-cli password score "mypassword123"
# JSON output
pass-cli password score "MySecureP@ssw0rd*" --output json
JSON输出示例:
{
"numeric_score": 51.666666666666664,
"password_score": "Vulnerable",
"penalties": [
"ContainsCommonPassword",
"Consecutive"
]
}
SSH代理集成
将SSH密钥加载至现有代理
将Proton Pass SSH密钥加载到您现有的SSH代理中:
# Load all SSH keys
pass-cli ssh-agent load
# Load from specific vault
pass-cli ssh-agent load --share-id MY_SHARE_ID
pass-cli ssh-agent load --vault-name MySshKeysVault
前提条件:确保SSH_AUTH_SOCK环境变量已定义。
以SSH代理身份运行Proton Pass CLI
将Proton Pass CLI作为独立SSH代理启动:
# Start agent
pass-cli ssh-agent start
# From specific vault
pass-cli ssh-agent start --share-id MY_SHARE_ID
pass-cli ssh-agent start --vault-name MySshKeysVault
# Custom socket path
pass-cli ssh-agent start --socket-path /custom/path/agent.sock
# Custom refresh interval (default 3600 seconds)
pass-cli ssh-agent start --refresh-interval 7200 # 2 hours
启动后,导出套接字:
export SSH_AUTH_SOCK=/Users/youruser/.ssh/proton-pass-agent.sock
自动创建SSH密钥项目(v1.3.0+)
自动保存通过ssh-add添加的SSH密钥:
# Enable auto-creation
pass-cli ssh-agent start --create-new-identities MySshKeysVault
# In another terminal
export SSH_AUTH_SOCK=$HOME/.ssh/proton-pass-agent.sock
ssh-add ~/.ssh/my_new_key
# Key is now automatically saved to Proton Pass!
SSH故障排除
ssh-copy-id因密钥过多而失败
强制密码认证:
ssh-copy-id -o PreferredAuthentications=password -o PubkeyAuthentication=no user@server
Pass URI语法(密钥引用)
使用以下格式引用密钥:pass://vault/item/field
语法
pass://<vault-identifier>/<item-identifier>/<field-name>
- vault-identifier:保险库的共享ID或名称
- item-identifier:项目的ID或标题
- field-name:要检索的特定字段(必需)
示例
# By names
pass://Work/GitHub Account/password
pass://Personal/Email Login/username
# By IDs
pass://AbCdEf123456/XyZ789/password
pass://ShareId123/ItemId456/api_key
# Mixed (vault by name, item by ID)
pass://Work/XyZ789/password
# Custom fields (case-sensitive)
pass://Work/API Keys/api_key
pass://Production/Database/connection_string
常用字段
username- 用户名/登录名password- 密码email- 电子邮箱地址网址- 网站网址备注- 附加备注TOTP- TOTP 密钥(用于双因素认证)- 支持任何名称的自定义字段(区分大小写)
规则
- 所有三个组件(保险库/项目/字段)均为必需
- 支持带空格的名称
- 解析区分大小写
- 如果存在重复项,则使用第一个匹配项(建议使用 ID 以确保精确性)
无效格式:
pass://vault/item # Missing field name
pass://vault/item/ # Trailing slash
pass://vault/ # Missing item and field
密钥注入
运行包含密钥的命令 (运行)
执行命令时,将 Proton Pass 中的密钥作为环境变量注入。
概要:
pass-cli run [--env-file FILE]... [--no-masking] -- COMMAND [ARGS...]
工作原理:
- 从当前进程和
.env文件中收集环境变量 - 扫描
pass://变量值中的URI - 从Proton Pass解析密钥
- 将URI替换为实际的密钥值
- 在输出中屏蔽密钥(除非使用
--no-masking) - 使用解析后的环境执行命令
- 转发stdin/stdout/stderr和信号(SIGTERM/SIGINT)
参数:
--env-file FILE- 从dotenv文件加载环境变量(可指定多个,按顺序处理)--no-masking- 禁用输出中自动屏蔽密钥的功能COMMAND [ARGS...]- 要执行的命令(必须放在--之后)
基本用法
# Set secret reference in environment
export DB_PASSWORD='pass://Production/Database/password'
# Run application with injected secret
pass-cli run -- ./my-app
使用.env文件
创建.env运行:
DB_HOST=localhost
DB_PORT=5432
DB_USERNAME=admin
DB_PASSWORD=pass://Production/Database/password
API_KEY=pass://Work/External API/api_key
单一值中的多个密钥
pass-cli run --env-file .env -- ./my-app
# Multiple env files (later override earlier)
pass-cli run \
--env-file base.env \
--env-file secrets.env \
--env-file local.env \
-- ./my-app
密钥掩码
# Mix secrets with plain text
DATABASE_URL="postgresql://user:pass://vault/db/password@localhost/db"
API_ENDPOINT="https://api.example.com?key=pass://vault/api/key"
默认(掩码):
取消掩码:
pass-cli run -- ./my-app
# If app logs: API_KEY: sk_live_abc123
# Output shows: API_KEY: <concealed by Proton Pass>
使用参数运行
pass-cli run --no-masking -- ./my-app
CI/CD 集成
pass-cli run -- ./my-app --config production --verbose
将密钥注入模板(
#!/bin/bash
# Load production secrets
pass-cli run --env-file .env.production -- ./deploy.sh
注入)处理模板文件,并使用类似 Handlebars 的语法将密钥引用替换为实际值。
概要:
工作原理:
pass-cli inject [--in-file FILE] [--out-file FILE] [--force] [--file-mode MODE]
从
- --in-file
或标准输入读取模板查找 - {{ pass://vault/item/field }}
模式从 Proton Pass 解析密钥 - 将引用替换为实际值
- 输出到
- --out-file
--out-file或标准输出 - 设置文件权限(Unix)
参数:
--in-file,-i- 模板文件路径(或标准输入)--out-file,-o- 输出写入路径(或标准输出)--force,-f- 不提示直接覆盖输出文件--file-mode- 设置文件权限(Unix,默认:0600)
模板语法
重要:使用双花括号{{ }}(不同于运行命令使用裸花括号)pass://)
# config.yaml.template
database:
host: localhost
username: {{ pass://Production/Database/username }}
password: {{ pass://Production/Database/password }}
api:
key: {{ pass://Work/API Keys/api_key }}
secret: {{ pass://Work/API Keys/secret }}
# This comment with pass://fake/uri is ignored
# Only {{ }} wrapped references are processed
注入到标准输出
pass-cli inject --in-file config.yaml.template
注入到文件
pass-cli inject \
--in-file config.yaml.template \
--out-file config.yaml
# Overwrite existing
pass-cli inject \
--in-file config.yaml.template \
--out-file config.yaml \
--force
从标准输入读取
cat template.txt | pass-cli inject
# Or with heredoc
pass-cli inject << EOF
{
"database": {
"password": "{{ pass://Production/Database/password }}"
}
}
EOF
自定义文件权限
pass-cli inject \
--in-file template.txt \
--out-file config.txt \
--file-mode 0644
JSON模板示例
{
"database": {
"host": "localhost",
"password": "{{ pass://Production/Database/password }}"
},
"api": {
"key": "{{ pass://Work/API/key }}"
}
}
设置管理
配置持久化偏好设置:
查看设置
pass-cli settings view
设置默认保险库
# By name
pass-cli settings set default-vault --vault-name "Personal Vault"
# By share ID
pass-cli settings set default-vault --share-id "3GqM1RhVZL8uXR_abc123"
受影响的命令: 项目列表,项目查看,项目TOTP,项目创建,项目更新, 等等。
设置默认输出格式
pass-cli settings set default-format human
pass-cli settings set default-format json
受影响的命令: 项目列表,项目查看,项目动态口令,保险库列表,等等。
取消默认设置
pass-cli settings unset default-vault
pass-cli settings unset default-format
共享管理
列出所有共享
pass-cli share list
pass-cli share list --output json
显示所有与您共享的资源(保险库和项目)以及您的角色。
邀请管理
列出待处理邀请
pass-cli invite list
pass-cli invite list --output json
接受邀请
pass-cli invite accept --invite-token "abc123def456"
拒绝邀请
pass-cli invite reject --invite-token "abc123def456"
用户与会话信息
查看会话信息
pass-cli info
显示:发布轨道、用户ID、用户名、电子邮件。
查看详细用户信息
pass-cli user info
pass-cli user info --output json
显示:账户详情、订阅状态、存储使用情况。
测试连接
pass-cli test
验证会话有效性和API连通性。
更新
注意:仅适用于手动安装(非包管理器)。
更新至最新版本
pass-cli update
pass-cli update --yes # Skip confirmation
更改发布渠道
# Switch to beta
pass-cli update --set-track beta
pass-cli update
# Switch back to stable
pass-cli update --set-track stable
pass-cli update
禁用自动更新检查
export PROTON_PASS_NO_UPDATE_CHECK=1
对象类型
共享
一个共享代表用户与资源(保管库或项目)之间的关系。定义访问权限和许可。
- 保管库共享:访问整个保管库及其中的所有项目
- 项目共享:仅访问单个特定项目
- 角色:
- 查看者:只读访问权限
- 编辑者:读写权限,可以管理项目(但不能共享或管理成员)
- 管理者:完全控制,包括共享和成员管理
- 所有者:创建保管库的人,唯一可以删除保管库的角色
保管库
一个用于整理项目的容器。每个项目仅存在于一个保险库中。
项目类型
- 登录信息:包含URL的用户名/密码凭证,支持TOTP
- 笔记:安全文本笔记
- 信用卡:支付卡信息(加密)
- 身份信息:关于个人的个人信息
- 别名:用于隐私保护的电子邮件别名
- SSH密钥:用于身份验证的SSH私钥
- WiFi:访问WiFi网络的凭证
注意:项目通过项目ID标识,但此ID仅在结合共享ID时才具有唯一性(共享ID + 项目ID = 全局唯一)。
最佳实践
安全性
- 使用网页登录以获得最大兼容性(SSO、U2F)
- 为每个账户生成唯一密码
- 使用存储在Pass中的SSH密钥而非本地文件系统
- 在共享系统上登出
- 定期审查共享权限
组织管理
- 为不同场景(工作、个人)创建独立保险库
- 为条目和保险库使用描述性标题
- 为常用保险库设置默认值
- 配置默认输出格式(脚本用JSON,交互用易读格式)
自动化
- 将凭证存储在文件中(而非环境变量)以增强安全性
- 使用Pass URI实现程序化密钥访问
- 利用JSON输出进行脚本编写
- 在自动化清理中包含
pass-cli logout命令共享管理
遵循最小权限原则(从查看者权限开始)
- 持续协作优先使用保险库共享
- 特定有限访问使用条目共享
- Use item shares for specific, limited access
- 定期审核成员和权限
Docker 使用
在 Docker 容器中运行时需要使用文件系统密钥存储(密钥环不可用):
# 1. Ensure logged out
pass-cli logout --force
# 2. Set filesystem key provider
export PROTON_PASS_KEY_PROVIDER=fs
# 3. Login as normal
pass-cli login
为何使用文件系统存储?
- 容器无法访问内核密钥管理服务
- 无头环境中 D-Bus 不可用
- 文件系统存储是唯一选择
⚠️安全提示:密钥与加密数据并列存储。请确保容器环境的安全性。
故障排除
认证问题
# Check session status
pass-cli info
pass-cli test
# Re-authenticate
pass-cli logout
pass-cli login
网络问题
- 验证互联网连接
- 检查 Proton 域名的防火墙设置
- 使用以下命令测试
pass-cli test
权限错误
- 验证您的角色:
pass-cli share list - 确保您拥有执行该操作所需的权限
- 联系保险库所有者调整权限
缺少资源
- 检查您是否在正确的保险库中查找
- 确认资源未被删除
- 确认访问权限未被撤销
- 检查待处理的邀请:
pass-cli invite list
密钥引用解析错误
"无效的引用格式":
- 确保格式为
pass://vault/item/field - 检查尾部斜杠
- 确认所有三个组件都存在
"密钥引用需要字段名":
- 添加字段名:
pass://vault/item/field(而非pass://vault/item)
"未找到字段":
- 确认字段存在:
pass-cli item view --share-id <id> --item-id <id> - 检查字段名称拼写(区分大小写)
未找到引用:
- 检查保险库访问权限:
pass-cli vault list - 验证项目是否存在:
pass-cli item list --share-id <id> - 确认字段名称:
pass-cli item view <uri>
配置
日志记录
# Levels: trace, debug, info, warn, error, off
export PASS_LOG_LEVEL=debug
注意:日志发送至标准错误输出(不会干扰管道/命令集成)。
会话存储
默认位置:
- macOS:
~/Library/Application Support/proton-pass-cli/.session/ - Linux:
~/.local/share/proton-pass-cli/.session/
覆盖:
export PROTON_PASS_SESSION_DIR='/custom/path'
密钥存储提供程序
控制加密密钥的存储方式PROTON_PASS_KEY_PROVIDER:
1. 密钥环存储(默认,最安全)
export PROTON_PASS_KEY_PROVIDER=keyring # or unset
使用操作系统安全存储:
- macOS:macOS 钥匙串
- Linux:基于内核的秘密存储(内核密钥环)
- Windows:Windows 凭据管理器
工作原理:
- 首次运行时生成随机的 256 位密钥
- 存储在系统密钥环中
- 后续运行时检索
- 如果密钥环不可用但会话存在,出于安全考虑会强制登出
Linux 注意事项:使用内核密钥环(无需 D-Bus),可在无头环境中工作。重启后秘密信息会被清除。
Docker 限制:容器无法访问内核秘密服务。请改用文件系统存储。
2. 文件系统存储
⚠️警告:安全性较低 - 密钥与加密数据存储在同一位置。
export PROTON_PASS_KEY_PROVIDER=fs
将密钥存储在<session-dir>/local.key文件中,权限设置为0600。
优点:
- 适用于所有环境(无头模式、容器)
- 重启后仍有效
- 不依赖系统服务
使用场景:
- Docker 容器
- 开发/测试环境
- 系统密钥环不可用时
3. 环境变量存储
⚠️警告:同一会话中的其他进程可看到密钥。
export PROTON_PASS_KEY_PROVIDER=env
export PROTON_PASS_ENCRYPTION_KEY=your-secret-key
从PROTON_PASS_ENCRYPTION_KEY环境变量(必须设置且非空)派生加密密钥。
生成安全密钥:
dd if=/dev/urandom bs=1 count=2048 2>/dev/null | sha256sum | awk '{print $1}'
优势:
- 跨所有环境可移植
- 无文件系统/密钥环依赖
- 用户控制密钥值
- 适用于CI/CD、容器、无头环境
何时使用:
- CI/CD流水线
- 不希望文件系统持久化的容器环境
- 自动化脚本
- 需要显式控制加密密钥
遥测
禁用遥测:
export PROTON_PASS_DISABLE_TELEMETRY=1
或全局禁用:账户安全设置→ 禁用"收集使用诊断信息"
发送内容:匿名化使用数据(例如:"创建了笔记类型项目")-绝不包含个人/敏感数据。
环境变量
登录凭证(交互式登录)
export PROTON_PASS_PASSWORD='password'
export PROTON_PASS_PASSWORD_FILE='/path/to/file'
export PROTON_PASS_TOTP='123456'
export PROTON_PASS_TOTP_FILE='/path/to/file'
export PROTON_PASS_EXTRA_PASSWORD='extra-password'
export PROTON_PASS_EXTRA_PASSWORD_FILE='/path/to/file'
SSH密钥密码
export PROTON_PASS_SSH_KEY_PASSWORD='passphrase'
export PROTON_PASS_SSH_KEY_PASSWORD_FILE='/path/to/file'
更新检查
export PROTON_PASS_NO_UPDATE_CHECK=1
安装
export PROTON_PASS_CLI_INSTALL_DIR=/custom/path
export PROTON_PASS_CLI_INSTALL_CHANNEL=beta
常见工作流程
创建并填充新保险库
# Create vault
pass-cli vault create --name "Project Alpha"
# List to get share ID
pass-cli vault list
# Create login items
pass-cli item create login \
--share-id "new_vault_id" \
--title "API Key" \
--username "api_user" \
--generate-password \
--url "https://api.example.com"
# Share with team
pass-cli vault share --share-id "new_vault_id" alice@team.com --role editor
导入和使用SSH密钥
# Import existing key
pass-cli item create ssh-key import \
--from-private-key ~/.ssh/id_ed25519 \
--vault-name "SSH Keys" \
--title "GitHub Key"
# Load into SSH agent
pass-cli ssh-agent load --vault-name "SSH Keys"
# Or start Pass as SSH agent
pass-cli ssh-agent start --vault-name "SSH Keys"
export SSH_AUTH_SOCK=$HOME/.ssh/proton-pass-agent.sock
脚本化访问密钥
#!/bin/bash
# Automated login
export PROTON_PASS_PASSWORD_FILE="$HOME/.secrets/pass-password"
pass-cli login --interactive user@proton.me
# Retrieve secret
DB_PASSWORD=$(pass-cli item view "pass://Production/Database/password" --output json | jq -r '.password')
# Use secret
connect-to-db --password "$DB_PASSWORD"
# Cleanup
pass-cli logout
包含密钥的应用程序部署
#!/bin/bash
# Create .env.production with secret references
cat > .env.production << EOF
NODE_ENV=production
DATABASE_URL=pass://Production/Database/connection_string
API_KEY=pass://Production/API/key
STRIPE_SECRET=pass://Production/Stripe/secret_key
EOF
# Deploy application with secrets injected
pass-cli run --env-file .env.production -- npm start
# Or generate config file from template
pass-cli inject \
--in-file config.yaml.template \
--out-file config.yaml \
--force
# Then run app with generated config
./app --config config.yaml
CI/CD流水线集成
#!/bin/bash
# Login with environment variable key storage
export PROTON_PASS_KEY_PROVIDER=env
export PROTON_PASS_ENCRYPTION_KEY="${CI_PASS_ENCRYPTION_KEY}"
export PROTON_PASS_PASSWORD_FILE=/run/secrets/pass-password
pass-cli login --interactive user@proton.me
# Run tests with secrets
pass-cli run --env-file .env.test -- npm test
# Deploy with secrets
pass-cli run --env-file .env.production -- ./deploy.sh
# Cleanup
pass-cli logout
注意事项
- 测试版状态:Proton Pass CLI目前处于测试版
- 版本切换:仅适用于手动安装(不适用于包管理器)
- 项目更新限制:无法通过CLI更新TOTP或时间字段
- 密码短语建议:生成的密钥的密码短语为可选(已在保险库中加密)
- SSH代理刷新:默认1小时,可使用
--refresh-interval - 自定义Docker容器:
PROTON_PASS_KEY_PROVIDER=fs) - Linux密钥环:使用内核密钥环(无D-Bus),重启时清除密钥
- 遥测:仅匿名化(无个人数据),可禁用
- 密钥掩码:自动在
run命令输出中掩码密钥 - 模板语法:
inject命令需要{{ }}花括号,run命令使用裸pass://URI - 项目ID唯一性:项目ID仅在与共享ID结合时才唯一
命令参考速查表
认证:
login,登出,信息,测试
保险库:
保险库列表,保险库创建,保险库更新,保险库删除,保险库共享,保险库成员,保险库转移
项目:
项目列表,项目查看,项目创建,项目更新,删除项目,分享项目,项目TOTP,项目别名,项目附件
密钥注入:
运行- 以环境变量形式注入密钥来执行命令注入- 处理包含密钥引用的模板文件
密码:
生成密码,密码评分
SSH:
加载ssh-agent,启动ssh-agent
设置:
查看设置,设置配置,设置取消
分享与邀请:
分享列表,邀请列表,接受邀请,拒绝邀请
用户:
用户信息
更新:
更新


微信扫一扫,打赏作者吧~