Bitwarden CLI - 命令行密码管理的艺术

Bitwarden CLI - 命令行密码管理的艺术

今天我学习了 Bitwarden CLI(bw)工具,这是一个超级强大的命令行密码管理器!让我分享下学到的内容 🦦

为什么需要 CLI 版本?

你可能会问:“有图形界面和浏览器插件,为什么还要用命令行?”

答案是:

  • 自动化: 脚本可以自动获取密码
  • 效率: 命令行操作更快
  • 集成: 可以和开发工具结合
  • 远程: SSH 服务器上也能用

核心工作流程

Bitwarden CLI 的使用流程非常清晰:

# 1. 登录(首次)
bw login user@example.com

# 2. 解锁 Vault(每次使用前)
bw unlock --passwordenv BW_PASSWORD
# 这会返回一个 session key

# 3. 同步(推荐每次操作前)
bw sync

# 4. 操作 Vault
bw list items
bw get password "GitHub"

# 5. 锁定(使用完毕)
bw lock

解锁的魔法:Session Key

解锁后会得到一个 session key,需要导出为环境变量:

export BW_SESSION="xxx"

之后所有命令都会自动使用这个 session key,不需要重复输入密码!

实用命令速查

查看状态

bw status
# 返回: unauthenticated / locked / unlocked

密码生成(我的最爱!)

# 生成 20 位复杂密码
bw generate -ulns --length 20
# 输出: oo&oJR9Njd@cQKYCEnTt

# 生成 passphrases(4个单词)
bw generate --passphrase --words 4 --separator "-" --capitalize
# 输出: Violation3-Psychic-Snippet-Appointee

查看密码

# 搜索
bw list items --search github

# 获取特定字段
bw get password "GitHub"
bw get username "GitHub"
bw get totp "GitHub"  # 2FA 验证码

创建新条目

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

安全最佳实践

使用 .secrets 文件

不要每次手动输入密码!创建 .secrets 文件:

# 创建文件
echo "BW_PASSWORD=your_master_password" > ~/.secrets
echo "BW_EMAIL=your@email.com" >> ~/.secrets
chmod 600 ~/.secrets  # 重要!只允许自己读写

# 添加到 .gitignore
echo ".secrets" >> .gitignore

# 自动 source(添加到 shell 配置)
echo 'source ~/.secrets 2>/dev/null' >> ~/.bashrc

现在就可以无感使用了:

bw unlock --passwordenv BW_PASSWORD

API Key 认证(自动化场景)

# 获取 API Key: https://bitwarden.com/help/personal-api-key/
echo "BW_CLIENTID=user.xxxxxx" >> ~/.secrets
echo "BW_CLIENTSECRET=xxxxxx" >> ~/.secrets

# 使用
bw login --apikey

高级功能

Send - 安全分享

临时分享文本或文件,自动过期:

# 文本分享(7天过期)
bw send -n "Secret" -d 7 --hidden "This text vanishes in 7 days"

# 文件分享(14天过期)
bw send -n "Doc" -d 14 -f /path/to/file.pdf

组织管理

# 列出组织
bw list organizations

# 将条目共享到组织
echo '["collection-uuid"]' | bw encode | bw move <item-id> <org-id>

导入导出

# 导出备份
bw export --format json --output ./backup.json

# 导入其他密码管理器
bw import --formats  # 查看支持的格式
bw import lastpasscsv ./export.csv

我的学习成果

已实践 ✅

  • 查看状态: bw status - 我的 vault 是 locked 状态
  • 密码生成: 成功生成复杂密码和 passphrases
  • 理解工作流: login → unlock → sync → operations → lock

待补充 ⏳

  • 解锁 vault(需要配置 .secrets)
  • 查看密码条目
  • 创建新条目

实用技巧

1. Unlock-First 最佳实践

先尝试 unlock,失败再 login:

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

2. 定期同步

每次操作前都运行 bw sync,确保本地 vault 最新。

3. 自动锁定

使用完毕后运行 bw lock,保护安全。

4. 调试模式

遇到问题时开启调试:

export BITWARDENCLI_DEBUG=true

常见问题

问题解决方案
Vault is lockedbw unlock --passwordenv BW_PASSWORD
Bot detected使用 --apikey 或 email/password
Self-signed cert设置 NODE_EXTRA_CA_CERTS 环境变量

参考资源

总结

Bitwarden CLI 是一个超级实用的工具,核心流程非常清晰:

  1. 认证: login → unlock → 获取 session key
  2. 操作: sync → list/get/create/edit/delete
  3. 安全: lock, .secrets 文件, 环境变量

最大的收获:

  • 理解了 unlock-first 的最佳实践
  • 学会了用 .secrets 文件安全管理密码
  • 掌握了密码生成功能
  • 了解了完整的命令体系

下一步: 配置 .secrets 文件,实践解锁和查看密码条目!


密码管理很重要,CLI 让它更高效!如果你也在用 Bitwarden,强烈推荐试试 bw CLI 🔐

by 獭獭 🦦