ClawSkills logoClawSkills

Proton Pass CLI

管理 Proton Pass 保管库、项目(登录信息、SSH 密钥、别名、备注)、密码、SSH 代理集成以及向应用程序注入密钥。当处理

介绍

# Proton Pass CLI

通过 Proton Pass CLI 全面管理密码和密钥。管理保险库、项目、SSH 密钥、共享凭据、注入密钥以及集成 SSH 工作流。

## 安装

### 快速安装

macOS/Linux: ```bash curl -fsSL https://proton.me/download/pass-cli/install.sh | bash ```

Windows: ```powershell Invoke-WebRequest -Uri https://proton.me/download/pass-cli/install.ps1 -OutFile install.ps1; .\install.ps1 ```

### Homebrew (macOS)

```bash brew install protonpass/tap/pass-cli ```

**注意:** 通过包管理器(如 Homebrew 等)安装不支持 `pass-cli update` 命令或切换版本通道。

### 验证安装

```bash pass-cli --version ```

## 身份验证

### Web 登录(推荐)

支持所有登录流程(SSO、U2F)的默认身份验证方法:

```bash pass-cli login # Open the URL displayed in your browser and complete authentication ```

### 交互式登录

基于终端的身份验证(支持密码 + TOTP,但不支持 SSO 或 U2F):

```bash pass-cli login --interactive [email protected] ```

#### 用于自动化的环境变量

```bash # 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 [email protected] ```

### 验证会话

```bash pass-cli info # Show session info pass-cli test # Test connection ```

### 登出

```bash pass-cli logout # Normal logout pass-cli logout --force # Force local cleanup if remote fails ```

## 保险库管理

### 列出保险库

```bash pass-cli vault list pass-cli vault list --output json ```

### 创建保险库

```bash pass-cli vault create --name "Vault Name" ```

### 更新保险库

```bash # 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" ```

### 删除保险库

⚠️ **警告:** 永久删除保险库及其所有项目。

```bash # By share ID pass-cli vault delete --share-id "abc123def"

# By name pass-cli vault delete --vault-name "Old Vault" ```

### 共享保险库

```bash # Share with viewer access (default) pass-cli vault share --share-id "abc123def" [email protected]

# Share with specific role pass-cli vault share --vault-name "Team Vault" [email protected] --role editor

# Roles: viewer, editor, manager ```

### 管理保险库成员

```bash # 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" ```

### 转移保险库所有权

```bash pass-cli vault transfer --share-id "abc123def" "member_share_id_xyz" pass-cli vault transfer --vault-name "My Vault" "member_share_id_xyz" ```

## 项目管理

### 列出项目

```bash # 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 ```

### 查看项目

```bash # 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 ```

### 创建登录项目

```bash # 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 "[email protected]" \ --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" ```

#### 登录模板

```bash # 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 - ```

模板格式: ```json { "title": "Item Title", "username": "optional_username", "email": "[email protected]", "password": "optional_password", "urls": ["https://example.com", "https://app.example.com"] } ```

### 创建 SSH 密钥项目

#### 生成新的 SSH 密钥

```bash # 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 密钥

```bash # 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 ```

**建议:** 对于导入受密码短语保护的密钥,建议先移除密码短语,因为密钥将在您的保险库中被加密:

```bash # 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 ```

### 创建邮箱别名

```bash # 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 ```

### 更新项目

```bash # 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 protected]"

# 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 客户端进行这些操作。

### 删除项目

⚠️ **警告:** 永久删除。

```bash pass-cli item delete --share-id "abc123def" --item-id "item456" ```

### 共享项目

```bash # Share with viewer access (default) pass-cli item share --share-id "abc123def" --item-id "item456" [email protected]

# Share with editor access pass-cli item share --share-id "abc123def" --item-id "item456" [email protected] --role editor ```

### 生成 TOTP 代码

```bash # 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"]' ```

## 密码生成与分析

### 生成密码

```bash # 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 ```

### 分析密码强度

```bash # Score a password pass-cli password score "mypassword123"

# JSON output pass-cli password score "MySecureP@ssw0rd*" --output json ```

示例 JSON 输出: ```json { "numeric_score": 51.666666666666664, "password_score": "Vulnerable", "penalties": [ "ContainsCommonPassword", "Consecutive" ] } ```

## SSH 代理集成

### 将 SSH 密钥加载到现有代理中

将 Proton Pass SSH 密钥加载到您现有的 SSH 代理中:

```bash # 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` 环境变量。

### 将 Proton Pass CLI 作为 SSH 代理运行

将 Proton Pass CLI 作为独立的 SSH 代理启动:

```bash # 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 ```

启动后,导出 socket: ```bash export SSH_AUTH_SOCK=/Users/youruser/.ssh/proton-pass-agent.sock ```

#### 自动创建 SSH 密钥项目 (v1.3.0+)

自动保存通过 `ssh-add` 添加的 SSH 密钥:

```bash # 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 因密钥过多而失败

强制使用密码身份验证: ```bash 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:** 要检索的特定字段(必需)

### 示例

```bash # 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` - 电子邮件地址 - `url` - 网站 URL - `note` - 附加备注 - `totp` - TOTP 密钥(用于 2FA) - 任何名称的自定义字段(区分大小写)

### 规则

- 所有三个组件(vault/item/field)都是必需的 - 支持带空格的名称 - 解析区分大小写 - 如果存在重复项,则使用第一个匹配项(为精确起见,建议使用 ID)

**无效格式:** ```bash pass://vault/item # Missing field name pass://vault/item/ # Trailing slash pass://vault/ # Missing item and field ```

## 密钥注入

### 使用密钥运行命令 (`run`)

执行命令时,将 Proton Pass 中的密钥作为环境变量注入。

**概要:** ```bash pass-cli run [--env-file FILE]... [--no-masking] -- COMMAND [ARGS...] ```

**工作原理:** 1. 从当前进程和 `.env` 文件中收集环境变量 2. 扫描变量值中的 `pass://` URI 3. 从 Proton Pass 解析密钥 4. 将 URI 替换为实际密钥值 5. 在输出中屏蔽密钥(除非使用 `--no-masking`) 6. 使用解析后的环境执行命令 7. 转发 stdin/stdout/stderr 和信号 (SIGTERM/SIGINT)

**参数:** - `--env-file FILE` - 从 dotenv 文件加载环境变量(可指定多个,按顺序处理) - `--no-masking` - 禁用输出中的自动密钥屏蔽 - `COMMAND [ARGS...]` - 要执行的命令(必须位于 `--` 之后)

#### 基本用法

```bash # Set secret reference in environment export DB_PASSWORD='pass://Production/Database/password'

# Run application with injected secret pass-cli run -- ./my-app ```

#### 使用 .env 文件

创建 `.env`: ```bash DB_HOST=localhost DB_PORT=5432 DB_USERNAME=admin DB_PASSWORD=pass://Production/Database/password API_KEY=pass://Work/External API/api_key ```

运行: ```bash 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 ```

#### 单个值中的多个密钥

```bash # 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" ```

#### 密钥屏蔽

**默认(已屏蔽):** ```bash pass-cli run -- ./my-app # If app logs: API_KEY: sk_live_abc123 # Output shows: API_KEY: <concealed by Proton Pass> ```

**未屏蔽:** ```bash pass-cli run --no-masking -- ./my-app ```

#### 带参数运行

```bash pass-cli run -- ./my-app --config production --verbose ```

#### CI/CD 集成

```bash #!/bin/bash # Load production secrets pass-cli run --env-file .env.production -- ./deploy.sh ```

### 将密钥注入到模板 (`inject`)

处理模板文件,并使用 handlebars 风格的语法将密钥引用替换为实际值。

**概要:** ```bash pass-cli inject [--in-file FILE] [--out-file FILE] [--force] [--file-mode MODE] ```

**工作原理:** 1. 从 `--in-file` 或 stdin 读取模板 2. 查找 `{{ pass://vault/item/field }}` 模式 3. 从 Proton Pass 解析密钥 4. 将引用替换为实际值 5. 输出到 `--out-file` 或 stdout 6. 设置文件权限

**参数:** - `--in-file`, `-i` - 模板文件路径(或 stdin) - `--out-file`, `-o` - 写入输出的路径(或 stdout) - `--force`, `-f` - 覆盖输出文件而不提示 - `--file-mode` - 设置文件权限(Unix,默认:`0600`)

#### 模板语法

**重要:** 使用双大括号 `{{ }}`(与使用裸露的 `pass://` 的 `run` 不同)

```yaml # 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 ```

#### 注入到 stdout

```bash pass-cli inject --in-file config.yaml.template ```

#### 注入到文件

```bash 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 ```

#### 从 stdin 读取

```bash cat template.txt | pass-cli inject

# Or with heredoc pass-cli inject << EOF { "database": { "password": "{{ pass://Production/Database/password }}" } } EOF ```

#### 自定义文件权限

```bash pass-cli inject \ --in-file template.txt \ --out-file config.txt \ --file-mode 0644 ```

#### JSON 模板示例

```json { "database": { "host": "localhost", "password": "{{ pass://Production/Database/password }}" }, "api": { "key": "{{ pass://Work/API/key }}" } } ```

## 设置管理

配置持久性首选项:

### 查看设置

```bash pass-cli settings view ```

### 设置默认保险库

```bash # 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" ```

**受影响的命令:** `item list`、`item view`、`item totp`、`item create`、`item update` 等。

### 设置默认输出格式

```bash pass-cli settings set default-format human pass-cli settings set default-format json ```

**受影响的命令:** `item list`、`item view`、`item totp`、`vault list` 等。

### 取消设置默认值

```bash pass-cli settings unset default-vault pass-cli settings unset default-format ```

## 共享管理

### 列出所有共享

```bash pass-cli share list pass-cli share list --output json ```

显示与您共享的所有资源(保险库和项目)以及您的角色。

## 邀请管理

### 列出待处理的邀请

```bash pass-cli invite list pass-cli invite list --output json ```

### 接受邀请

```bash pass-cli invite accept --invite-token "abc123def456" ```

### 拒绝邀请

```bash pass-cli invite reject --invite-token "abc123def456" ```

## 用户与会话信息

### 查看会话信息

```bash pass-cli info ```

显示:版本通道、用户 ID、用户名、电子邮件。

### 查看详细用户信息

```bash pass-cli user info pass-cli user info --output json ```

显示:帐户详细信息、订阅、存储使用情况。

### 测试连接

```bash pass-cli test ```

验证会话有效性和 API 连接。

## 更新

**注意:** 仅适用于手动安装(不适用于包管理器)。

### 更新到最新版本

```bash pass-cli update pass-cli update --yes # Skip confirmation ```

### 更改版本通道

```bash # 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 ```

### 禁用自动更新检查

```bash export PROTON_PASS_NO_UPDATE_CHECK=1 ```

## 对象类型

### 共享 (Share)

共享代表用户与资源(保险库或项目)之间的关系。定义访问权限。

- **保险库共享:** 访问整个保险库及其中的所有项目 - **项目共享:** 仅访问单个特定项目 - **角色:** - **查看者:** 只读访问 - **编辑者:** 读写访问,可以管理项目(但不能共享或管理成员) - **管理者:** 完全控制,包括共享和成员管理 - **所有者:** 创建了保险库,唯一可以删除保险库的人

### 保险库 (Vault)

组织项目的容器。项目仅存在于一个保险库中。

### 项目类型

- **登录:** 带有 URL 和 TOTP 支持的用户名/密码凭据 - **备注:** 安全文本备注 - **信用卡:** 付款卡信息(已加密) - **身份:** 关于个人的个人信息 - **别名:** 用于隐私保护的邮箱别名 - **SSH 密钥:** 用于身份验证的 SSH 私钥 - **WiFi:** 访问 WiFi 网络的凭据

**注意:** 项目由项目 ID 标识,但此 ID 只有在与共享 ID 结合时才是唯一的(ShareID + ItemID = 全局唯一)。

## 最佳实践

### 安全性

- 使用 Web 登录以获得最大的兼容性 (SSO, U2F) - 为每个帐户生成唯一的密码 - 使用存储在 Pass 中的 SSH 密钥,而不是本地文件系统 - 在共享系统上登出 - 定期审查共享权限

### 组织结构

- 为不同的上下文(工作、个人)创建单独的保险库 - 为项目和保险库使用描述性标题 - 为常用保险库设置默认保险库 - 配置默认输出格式(脚本使用 JSON,交互使用人性化格式)

### 自动化

- 将凭据存储在文件中(而不是环境变量)以提高安全性 - 使用 Pass URI 进行程序化密钥访问 - 利用 JSON 输出进行脚本编写 - 在自动化清理中包含 `pass-cli logout`

### 共享

- 使用最小权限原则(从查看者开始) - 对于持续协作,首选保险库共享 - 对于特定的、有限的访问,使用项目共享 - 定期审计成员和权限

## Docker 用法

在 Docker 容器中运行需要文件系统密钥存储(密钥环不可用):

```bash # 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 不可用 - 文件系统存储是唯一的选择

⚠️ **安全提示:** 密钥与加密数据存储在一起。请确保您的容器环境安全。

## 故障排除

### 身份验证问题

```bash # 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`

### 密钥引用解析错误

**"无效的引用格式" (Invalid reference format):** - 确保格式为 `pass://vault/item/field` - 检查是否存在尾部斜杠 - 验证所有三个部分都存在

**"密钥引用需要字段名" (Secret reference requires a field name):** - 添加字段名:`pass://vault/item/field`(而非 `pass://vault/item`)

**"未找到字段" (Field not found):** - 验证字段是否存在:`pass-cli item view --share-id <id> --item-id <id>` - 检查字段名拼写(区分大小写)

**未找到引用:** 1. 检查保险库访问权限:`pass-cli vault list` 2. 验证项目是否存在:`pass-cli item list --share-id <id>` 3. 确认字段名:`pass-cli item view <uri>`

## 配置

### 日志记录

```bash # Levels: trace, debug, info, warn, error, off export PASS_LOG_LEVEL=debug ```

**注意:** 日志发送到 `stderr`(不会干扰管道/命令集成)。

### 会话存储

**默认位置:** - macOS: `~/Library/Application Support/proton-pass-cli/.session/` - Linux: `~/.local/share/proton-pass-cli/.session/`

**覆盖:** ```bash export PROTON_PASS_SESSION_DIR='/custom/path' ```

### 密钥存储提供程序

使用 `PROTON_PASS_KEY_PROVIDER` 控制加密密钥的存储方式:

#### 1. 密钥环存储(Keyring storage,默认,最安全)

```bash export PROTON_PASS_KEY_PROVIDER=keyring # or unset ```

使用操作系统安全存储: - **macOS:** macOS 钥匙串 - **Linux:** 基于内核的秘密存储(内核密钥环) - **Windows:** Windows 凭据管理器

**工作原理:** - 首次运行时生成随机的 256 位密钥 - 存储在系统密钥环中 - 后续运行时检索 - 如果密钥环不可用但会话存在,出于安全考虑强制注销

**Linux 说明:** 使用内核密钥环(不需要 D-Bus),可在无头环境中工作。**重启时清除机密。**

**Docker 限制:** 容器无法访问内核密钥服务。请改用文件系统存储。

#### 2. 文件系统存储

⚠️ **警告:** 安全性较低 - 密钥与加密数据存储在一起。

```bash export PROTON_PASS_KEY_PROVIDER=fs ```

将密钥存储在 `<session-dir>/local.key` 中,权限为 `0600`。

**优点:** - 适用于所有环境(无头、容器) - 重启后仍然存在 - 不依赖系统服务

**何时使用:** - Docker 容器 - 开发/测试 - 系统密钥环不可用时

#### 3. 环境变量存储

⚠️ **警告:** 同一会话中的其他进程可以看到密钥。

```bash export PROTON_PASS_KEY_PROVIDER=env export PROTON_PASS_ENCRYPTION_KEY=your-secret-key ```

从 `PROTON_PASS_ENCRYPTION_KEY` 派生加密密钥(必须已设置且非空)。

**生成安全密钥:** ```bash dd if=/dev/urandom bs=1 count=2048 2>/dev/null | sha256sum | awk '{print $1}' ```

**优点:** - 可跨所有环境移植 - 不依赖文件系统/密钥环 - 用户控制密钥值 - 适用于 CI/CD、容器、无头环境

**何时使用:** - CI/CD 流水线 - 不希望持久化文件系统的容器 - 自动化脚本 - 需要显式控制加密密钥

### 遥测

**禁用遥测:** ```bash export PROTON_PASS_DISABLE_TELEMETRY=1 ```

或在全局禁用:[账户安全设置](https://account.proton.me/pass/security) → 禁用“收集使用情况诊断数据”

**发送内容:** 匿名使用数据(例如,“创建了笔记类型的项目”)- **绝不**包含个人/敏感数据。

## 环境变量

### 登录凭据(交互式登录)

```bash 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 密钥密码

```bash export PROTON_PASS_SSH_KEY_PASSWORD='passphrase' export PROTON_PASS_SSH_KEY_PASSWORD_FILE='/path/to/file' ```

### 更新检查

```bash export PROTON_PASS_NO_UPDATE_CHECK=1 ```

### 安装

```bash export PROTON_PASS_CLI_INSTALL_DIR=/custom/path export PROTON_PASS_CLI_INSTALL_CHANNEL=beta ```

## 常见工作流

### 创建并填充新的保险库

```bash # 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" [email protected] --role editor ```

### 导入和使用 SSH 密钥

```bash # 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 ```

### 脚本化访问密钥

```bash #!/bin/bash # Automated login export PROTON_PASS_PASSWORD_FILE="$HOME/.secrets/pass-password" pass-cli login --interactive [email protected]

# 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 ```

### 使用密钥进行应用部署

```bash #!/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 流水线集成

```bash #!/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 [email protected]

# 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 ```

## 注意事项

- **Beta 状态:** Proton Pass CLI 目前处于 Beta 阶段 - **切换轨道:** 仅适用于手动安装(不适用于包管理器) - **项目更新限制:** 无法通过 CLI 更新 TOTP 或时间字段 - **密码短语建议:** 生成的密钥可选密码短语(已在保险库中加密) - **SSH 代理刷新:** 默认 1 小时,可通过 `--refresh-interval` 自定义 - **Docker 容器:** 必须使用文件系统密钥存储(`PROTON_PASS_KEY_PROVIDER=fs`) - **Linux 密钥环:** 使用内核密钥环(无 D-Bus),重启时清除机密 - **遥测:** 仅匿名(无个人数据),可禁用 - **密钥屏蔽:** 自动屏蔽 `run` 命令输出中的密钥 - **模板语法:** `inject` 需要 `{{ }}` 大括号,`run` 使用原始 `pass://` URI - **项目 ID 唯一性:** 项目 ID 仅在与 Share ID 结合时才唯一

## 命令参考快速列表

**身份验证:** - `login`, `logout`, `info`, `test`

**保险库:** - `vault list`, `vault create`, `vault update`, `vault delete`, `vault share`, `vault member`, `vault transfer`

**项目:** - `item list`, `item view`, `item create`, `item update`, `item delete`, `item share`, `item totp`, `item alias`, `item attachment`

**密钥注入:** - `run` - 执行命令并将密钥作为环境变量注入 - `inject` - 使用密钥引用处理模板文件

**密码:** - `password generate`, `password score`

**SSH:** - `ssh-agent load`, `ssh-agent start`

**设置:** - `settings view`, `settings set`, `settings unset`

**分享与邀请:** - `share list`, `invite list`, `invite accept`, `invite reject`

**用户:** - `user info`

**更新:** - `update`

更多产品