BitwardenCLISkill bw-cli

Bitwarden命令行界面(CLI)是一个用于与Bitwarden密码管理器进行交互的工具,支持认证(登录/解锁/登出/状态)、保险箱操作(列出/获取/创建/编辑/删除/恢复项目、文件夹、附件、集合)、密码/口令生成、组织管理以及发送/接收等功能。

身份认证 0 次安装 4 次浏览 更新于 2/24/2026

以下是Bitwarden命令行界面(CLI)的完整参考,用于通过命令行与Bitwarden进行交互。

官方文档: https://bitwarden.com/help/cli/
Markdown版本(适用于代理): https://bitwarden.com/help/cli.md

快速参考

安装

# 原生可执行文件(推荐)
# https://bitwarden.com/download/?app=cli

# npm
npm install -g @bitwarden/cli

# Linux包管理器
choco install bitwarden-cli  # Windows通过Chocolatey
snap install bw              # Linux通过Snap

认证流程(首选:先解锁)

标准工作流(解锁优先):

# 1. 先尝试解锁(快速,最常见情况)
export BW_SESSION=$(bw unlock --passwordenv BW_PASSWORD --raw 2>/dev/null)

# 2. 如果解锁失败,则回退到登录
if [ -z "$BW_SESSION" ]; then
  bw login "$BW_EMAIL" "$BW_PASSWORD"
  export BW_SESSION=$(bw unlock --passwordenv BW_PASSWORD --raw)
fi

# 3. 任何保险箱操作前同步
bw sync

# 4. 结束会话
bw lock                      # 锁定(保持登录)
bw logout                    # 完全登出

替代:直接登录方法

bw login                     # 交互式登录(电子邮件+密码)
bw login --apikey           # API密钥登录(使用.secrets中的BW_CLIENTID/BW_CLIENTSECRET)
bw login --sso              # SSO登录
bw unlock                    # 交互式解锁
bw unlock --passwordenv BW_PASSWORD     # 从.sourced .secrets自动可用

会话和配置命令

status

检查认证和保险箱状态:

bw status

返回值:unauthenticated, locked, 或 unlocked

config

配置CLI设置:

# 设置服务器(自托管或区域)
bw config server https://vault.example.com
bw config server https://vault.bitwarden.eu   # EU云
bw config server                              # 检查当前

# 个别服务URL
bw config server --web-vault <url> --api <url> --identity <url>

sync

同步本地保险箱与服务器(在任何保险箱操作前总是运行):

bw sync                     # 全部同步
bw sync --last             # 显示最后同步时间戳

update

检查更新(不自动安装):

bw update

serve

启动REST API服务器:

bw serve --port 8087 --hostname localhost

保险箱项目命令

list

列出保险箱对象:

# 项目
bw list items
bw list items --search github
bw list items --folderid <id> --collectionid <id>
bw list items --url https://example.com
bw list items --trash                        # 回收站中的物品

# 文件夹
bw list folders

# 集合
bw list collections                          # 所有集合
bw list org-collections --organizationid <id>  # 组织集合

# 组织
bw list organizations
bw list org-members --organizationid <id>

get

检索单个值或项目:

# 通过名称或ID获取特定字段
bw get password "GitHub"
bw get username "GitHub"
bw get totp "GitHub"                         # 2FA代码
bw get notes "GitHub"
bw get uri "GitHub"

# 获取完整项目JSON
bw get item "GitHub"
bw get item <uuid> --pretty

# 其他对象
bw get folder <id>
bw get collection <id>
bw get organization <id>
bw get org-collection <id> --organizationid <id>

# 创建操作的模板
bw get template item
bw get template item.login
bw get template item.card
bw get template item.identity
bw get template item.securenote
bw get template folder
bw get template collection
bw get template item-collections

# 安全
bw get fingerprint <user-id>
bw get fingerprint me
bw get exposed <password>                    # 检查密码是否泄露

# 附件
bw get attachment <filename> --itemid <id> --output /path/

create

创建新对象:

# 创建文件夹
bw get template folder | jq '.name="Work"' | bw encode | bw create folder

# 创建登录项目
bw get template item | jq \
  '.name="Service" | .login=$(bw get template item.login | jq '.username="user@example.com" | .password="secret"')' \
  | bw encode | bw create item

# 创建安全笔记(类型=2)
bw get template item | jq \
  '.type=2 | .secureNote.type=0 | .name="Note" | .notes="Content"' \
  | bw encode | bw create item

# 创建卡片(类型=3)
bw get template item | jq \
  '.type=3 | .name="My Card" | .card=$(bw get template item.card | jq '.number="4111..."')' \
  | bw encode | bw create item

# 创建身份(类型=4)
bw get template item | jq \
  '.type=4 | .name="My Identity" | .identity=$(bw get template item.identity)' \
  | bw encode | bw create item

# 创建SSH密钥(类型=5)
bw get template item | jq \
  '.type=5 | .name="My SSH Key"' \
  | bw encode | bw create item

# 附加文件到现有项目
bw create attachment --file ./doc.pdf --itemid <uuid>

项目类型:1=Login, 2=Secure Note, 3=Card, 4=Identity, 5=SSH Key

edit

修改现有对象:

# 编辑项目
bw get item <id> | jq '.login.password="newpass"' | bw encode | bw edit item <id>

# 编辑文件夹
bw get folder <id> | jq '.name="New Name"' | bw encode | bw edit folder <id>

# 编辑项目集合
 echo '["collection-uuid"]' | bw encode | bw edit item-collections <item-id> --organizationid <id>

# 编辑组织集合
bw get org-collection <id> --organizationid <id> | jq '.name="New Name"' | bw encode | bw edit org-collection <id> --organizationid <id>

delete

移除对象:

# 发送到回收站(30天内可恢复)
bw delete item <id>
bw delete folder <id>
bw delete attachment <id> --itemid <id>
bw delete org-collection <id> --organizationid <id>

# 永久删除(不可逆!)
bw delete item <id> --permanent

restore

从回收站恢复:

bw restore item <id>

密码生成

generate

生成密码或口令:

# 密码(默认:14个字符)
bw generate
bw generate --uppercase --lowercase --number --special --length 20
bw generate -ulns --length 32

# 口令
bw generate --passphrase --words 4 --separator "-" --capitalize --includeNumber

发送命令(安全共享)

send

创建临时共享:

# 文本发送
bw send -n "Secret" -d 7 --hidden "This text vanishes in 7 days"

# 文件发送
bw send -n "Doc" -d 14 -f /path/to/file.pdf

# 高级选项
bw send --password accesspass -f file.txt

receive

访问收到的发送内容:

bw receive <url> --password <pass>

组织命令

move

将项目共享到组织:

echo '["collection-uuid"]' | bw encode | bw move <item-id> <organization-id>

confirm

确认邀请的成员:

bw get fingerprint <user-id>
bw confirm org-member <user-id> --organizationid <id>

device-approval

管理设备批准:

bw device-approval list --organizationid <id>
bw device-approval approve <request-id> --organizationid <id>
bw device-approval approve-all --organizationid <id>
bw device-approval deny <request-id> --organizationid <id>
bw device-approval deny-all --organizationid <id>

导入和导出

import

从其他密码管理器导入:

bw import --formats                          # 列出支持的格式
bw import lastpasscsv ./export.csv
bw import bitwardencsv ./import.csv --organizationid <id>

export

导出保险箱数据:

bw export                                    # CSV格式
bw export --format json
bw export --format encrypted_json
bw export --format encrypted_json --password <custom-pass>
bw export --format zip                       # 包括附件
bw export --output /path/ --raw              # 输出到文件或stdout
bw export --organizationid <id> --format json

工具

encode

Base64编码JSON以创建/编辑操作:

bw get template folder | jq '.name="Test"' | bw encode | bw create folder

generate(密码)

见[密码生成](#password-generation)。

全局选项

所有命令上可用:

--pretty                     # 使用制表符格式化JSON输出
--raw                        # 返回原始输出
--response                   # JSON格式化响应
--quiet                      # 无stdout(用于管道秘密)
--nointeraction             # 不提示输入
--session <key>             # 直接传递会话密钥
--version                   # CLI版本
--help                      # 命令帮助

安全参考

安全密码存储(工作区.secrets)

在工作区根目录中存储主密码,并自动加载.secrets文件:

# 创建.secrets文件
mkdir -p ~/.openclaw/workspace
echo "BW_PASSWORD=your_master_password" > ~/.openclaw/workspace/.secrets
chmod 600 ~/.openclaw/workspace/.secrets

# 添加到.gitignore
echo ".secrets" >> ~/.openclaw/workspace/.gitignore

# 在shell配置中自动源(运行一次)
echo 'source ~/.openclaw/workspace/.secrets 2>/dev/null' >> ~/.bashrc
# 或者对于zsh:
echo 'source ~/.openclaw/workspace/.secrets 2>/dev/null' >> ~/.zshrc

现在BW_PASSWORD始终可用:

bw unlock --passwordenv BW_PASSWORD

安全要求:

  • 文件必须是600模式(仅用户读写)
  • 必须将.secrets添加到.gitignore
  • 永远不要提交.secrets文件
  • 自动源在新shell会话中发生;运行source ~/.openclaw/workspace/.secrets以用于当前会话

API密钥认证(工作区.secrets)

对于自动化/API密钥登录,在同一个.secrets文件中存储凭据:

# 添加API凭据到.secrets
echo "BW_CLIENTID=user.xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" >> ~/.openclaw/workspace/.secrets
echo "BW_CLIENTSECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" >> ~/.openclaw/workspace/.secrets
chmod 600 ~/.openclaw/workspace/.secrets

使用API密钥登录:

bw login --apikey

⚠️ 已知问题/解决方案

在某些自托管的Vaultwarden实例上,bw login --apikey可能会失败,并显示:

用户解密选项需要客户端初始化

解决方案 - 使用电子邮件/密码登录:

# 添加EMAIL到.secrets
echo "BW_EMAIL=your@email.com" >> ~/.openclaw/workspace/.secrets

# 使用电子邮件+密码登录(而不是--apikey)
bw login "$BW_EMAIL" "$BW_PASSWORD"

# 或作为单行
set -a && source ~/.openclaw/workspace/.secrets && set +a && bw login "$BW_EMAIL" "$BW_PASSWORD"

# 然后像平常一样解锁
bw unlock --passwordenv BW_PASSWORD

自托管的完整工作流程(推荐):

# 源.secrets文件
set -a && source ~/.openclaw/workspace/.secrets && set +a

# 先尝试解锁(更快,如果已经登录则有效)
export BW_SESSION=$(bw unlock --passwordenv BW_PASSWORD --raw 2>/dev/null)

# 只有在解锁失败时才登录(保险箱未初始化)
if [ -z "$BW_SESSION" ]; then
  bw login "$BW_EMAIL" "$BW_PASSWORD"
  export BW_SESSION=$(bw unlock --passwordenv BW_PASSWORD --raw)
fi

# 准备使用
bw sync
bw list items

获取您的API密钥: https://bitwarden.com/help/personal-api-key/

环境变量

BW_CLIENTID                  # API密钥client_id
BW_CLIENTSECRET              # API密钥client_secret
BW_PASSWORD                  # 解锁的主密码
BW_SESSION                   # 会话密钥(CLI自动使用)
BITWARDENCLI_DEBUG=true      # 启用调试输出
NODE_EXTRA_CA_CERTS          # 自签名证书路径
BITWARDENCLI_APPDATA_DIR     # 自定义配置目录

两步登录方法

方法值:0=Authenticator, 1=Email, 3=YubiKey

bw login user@example.com password --method 0 --code 123456

URI匹配类型

值:0=Domain, 1=Host, 2=Starts With, 3=Exact, 4=Regex, 5=Never

字段类型

值:0=Text, 1=Hidden, 2=Boolean

组织用户类型

0=Owner, 1=Admin, 2=User, 3=Manager, 4=Custom

组织用户状态

0=Invited, 1=Accepted, 2=Confirmed, -1=Revoked

最佳实践

  1. 先解锁,需要时才登录:先尝试bw unlock,因为它更快;只有在解锁失败时才运行bw login(保险箱未初始化)
  2. 总是同步:在任何保险箱操作前运行bw sync
  3. 安全会话:完成后使用bw lock
  4. 保护秘密:永远不要记录BW_SESSION或BW_PASSWORD
  5. 安全存储:保持.secrets文件为模式600,永远不要提交它
  6. 自动源:添加到~/.bashrc或~/.zshrc以持久化环境变量
  7. 验证指纹:在确认组织成员之前

故障排除

问题 解决方案
“Bot detected” 使用--apikey或提供client_secret
“Vault is locked” 运行bw unlock并导出BW_SESSION
自签名证书错误 设置NODE_EXTRA_CA_CERTS
需要调试信息 export BITWARDENCLI_DEBUG=true

参考资料: