以下是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。
最佳实践
- 先解锁,需要时才登录:先尝试
bw unlock,因为它更快;只有在解锁失败时才运行bw login(保险箱未初始化) - 总是同步:在任何保险箱操作前运行
bw sync - 安全会话:完成后使用
bw lock - 保护秘密:永远不要记录BW_SESSION或BW_PASSWORD
- 安全存储:保持.secrets文件为模式600,永远不要提交它
- 自动源:添加到~/.bashrc或~/.zshrc以持久化环境变量
- 验证指纹:在确认组织成员之前
故障排除
| 问题 | 解决方案 |
|---|---|
| “Bot detected” | 使用--apikey或提供client_secret |
| “Vault is locked” | 运行bw unlock并导出BW_SESSION |
| 自签名证书错误 | 设置NODE_EXTRA_CA_CERTS |
| 需要调试信息 | export BITWARDENCLI_DEBUG=true |
参考资料:
- HTML文档:https://bitwarden.com/help/cli/
- Markdown(可获取):https://bitwarden.com/help/cli.md
- 个人API密钥:https://bitwarden.com/help/personal-api-key/