AI 摘要
对比Bitwarden及其自建方案vaultwarden和nodewarden,介绍vaultwarden的Docker部署、备份、推送通知、YubiKey等配置,以及nodewarden在Cloudflare Worker上的无服务器部署与同步。

整理常用的密码管理器,着重说说 bitwarden.

一、引子

最早认识的密码管理器是 keepass,不过界面太老旧,当时设置的主密钥超级复杂,把自己都锁在外面。

目前最喜欢的,当然是 nodewarden(多端同步) + keepassxc(离线归档、内网环境)

两个系列,可以互相导入、导出。

KeePass 系列

  • keepass,界面丑,没有同步功能
  • keepassxc,电脑端,需要自己想办法多端同步
  • keepassdx,手机端,需要自己想办法多端同步

Bitwarden 系列

  • bitwarden 官方,TOTP功能付费
  • vaultwarden 自建,兼容 bitwarden
  • nodewarden,自建,兼容 bitwarden,无服务器,自带同步功能.

二、部署

bitwarden 官方版本吃资源,部署复杂.

vaultwarden 需要服务器,使用docker部署.

nodewarden 无需服务器,部署在 cloudflare worker.

2.1 vaultwarden(需要服务器)

2.1.1 常规设置

一般都会使用docker,默认是 sqlite3 数据库,也可以改用 mysqlpgsql 等.

难点是,防止服务器宕机、被黑,等情况数据可能丢失,需要想办法备份数据.

  • sqlite,默认.
1
2
3
4
5
6
7
8
9
10
11
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
DOMAIN: "https://vw.domain.tld"
volumes:
- ./vw-data/:/data/
ports:
- 127.0.0.1:8000:80
  1. 生成环境变量
1
../bin/ports.sh --write .
  1. 修改必要的环境变量,密钥环境变量

  2. 一键启动

1
docker compose up -d
  1. 设置反向代理

2.1.2 开启移动端推送通知

  1. 申请 Installation ID 和 Key
1
https://bitwarden.com/host/
  1. 设置环境变量
1
2
3
4
# ---- 推送通知(移动客户端) ----
PUSH_ENABLED=true
PUSH_INSTALLATION_ID=你申请到的ID
PUSH_INSTALLATION_KEY=你申请到的KEY
  1. 如果你申请的是 EU 区域(bitwarden.eu),还需要额外指定中继地址
1
2
PUSH_RELAY_URI=https://api.bitwarden.eu
PUSH_IDENTITY_URI=https://identity.bitwarden.eu

2.1.3 启用 YubiKey OTP 验证

需要手里有一个 yubikey.

  1. 获取 yubikey OTP,会自动打开网页上传
1
2
scoop install yubikey-manager-qt
ykman otp yubiotp 1 -P vvfhingjkltr --generate-private-id --generate-key --upload
  1. 申请凭证
1
https://upgrade.yubico.com/getapikey
  1. 设置环境变量
1
2
3
# ---- YubiKey OTP 二次验证 ----
YUBICO_CLIENT_ID=你的ClientID
YUBICO_SECRET_KEY=你的SecretKey
  1. 重启

2.1.4 翻译

默认的邮箱模板、管理界面是英文的.

翻译仓库

  1. 克隆仓库
1
2
cd /tmp
git clone https://github.com/WeiYusc/vaultwarden-lang-zhcn
  1. 复制文件夹 templatevaultwarden 的数据卷中.
1
cp -r vaultwarden-lang-zhcn/template /path/to/volume-data

2.1.5 新设备登录提醒

  1. 设置环境变量
1
REQUIRE_DEVICE_EMAIL=true
  1. 重启

2.2 nodewarden(无服务器)

  1. fork 原版仓库

  2. cloudflare worker 部署,初始化即可

  3. 绑定自己的域名
  4. 配置自动备份数据.
  5. 自动同步上游
1
.github/workflows/sync-upstream-by-me.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
name: Sync upstream

on:
schedule:
- cron: "0 19 * * *" # UTC 19:00 = 北京时间凌晨 3 点
workflow_dispatch: # 也支持手动点击触发

permissions:
contents: write

jobs:
sync:
runs-on: ubuntu-latest
steps:
- name: Checkout your fork
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: main

- name: Add upstream and fetch
run: |
git remote add upstream https://github.com/shuaiplus/NodeWarden.git
git fetch upstream

- name: Configure git identity
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"

- name: Merge upstream/main
run: |
git merge upstream/main --no-edit

- name: Push changes
run: |
git push origin main

三、日常使用

3.1 下载

  • 官网下载(推荐),支持 浏览器插件、PC端、安卓端.

  • github官方仓库下载

  • 其它渠道不推荐下载,毕竟是密码管理器

3.2 URI匹配规则

其实稍微对域名有所了解,一下子就明白了。

标准的一个URI,如下

1
2
3
https://sub.domain.com:4000/path
│ │ │ │ │
scheme 子域名 主域名 端口 路径
  • 基础域名,只看 domain.com
  • 主机,看 sub.domain.com:4000
  • 精确,看 https://sub.domain.com:4000/path

也可以自动匹配手机APP.

1
2
3
androidapp://com.tencent.mm
│ │
协议 包名

3.3 自动填充定位

有时候有太多的输入框,很容易填充错,此时可以添加 链接 字段.

  • 类型:链接型
  • 字段标签:元素的 idclass、等标签
  • 选择字段.

Keepass系列,可以手动选择窗口后,填写填充规则

1
{TOTP}{ENTER}

四、效果

4.1 vaultwarden

https://pwd.anyrun.app

1
2
用户名:
密码:

效果图

4.2 nodewarden

https://pwd.bravexist.eu.org

1
2
用户名:
密码:

效果图

五、关联阅读

中文翻译 wiki