主机数据迁移到个人电脑上服务使用。bitwarden_rs数据备份迁移到个人window电脑上_辽海河的博客-CSDN博客
工欲善其事,必先利其器。使用好的密码管理让你信息更安全,减少密码记忆,提高效率。最开始所有网站和银行卡都是使用通用账号和密码,感觉还挺爽YY,碰到网站就直接输入那个密码就行,后来QQ经常提醒异地登录,才知道其中一个网站密码被泄露了,可以使用同样账号和密码登录我注册过所有网站。太可怕了,后来使用网站名偏移,每个字母向后移2位,163就变成385了,这样每个网站密码都不一样,使用一段时间,发现某些品牌既有网站和APP,会导致记忆错误,经常需要修改密码,太麻烦。后来发现有密码管理器,它直接生成密码保存在加密数据库里,需要使用时候点击软件复制密码就行,这样也非常安全。后来发现许多这样软件,详细优缺点见 推荐几款好用的密码管理工具(KeePass、LastPass、1Password、花密、Enpass),就不详述。
使用心得
先介绍个人情况,mac、window、Android、iOS各有一部,偶尔使用window和iOS,安全和多平台同步是最强烈的需求。开始一年,是使用keepass,必须每周手动备份,Android做为主输入密码,其他平台做为查看密码,避免mac、Android同一天新增密码同步冲突。后来研究onedrive实现mac、window、Android实时同步,iOS还需要手动同步,这样碰到需要新增密码不用考虑同步冲突问题。不过后来在Android上经常必须搜索选择账号才能填充,网页填充不智能匹配,需要手动拷贝账号密码,有点烦。后来体验了下safeincloud,和keepass一样,数据库本地存储,通过onedrive或其他网盘同步,多平台体验效果一样,在浏览器上能智能匹配并填充上,在Android上第一次不能匹配,但它会自动把包名和账号绑定上,下次进去智能匹配并填充,这细节上使步骤节省70%,用起来还是非常好,唯一缺点它是俄国人开发的,非开源,是否会把信息同步到他们服务器,敏感信息始终有点不放心。经过研究发现bitwarden,和safeincloud效果差不多,bitwarden它是开源的,默认使用官网服务器存储账号密码,或动手能力较强,可下载服务器源代码进行部署。开源就有很多人监督,账号密码可存放自己服务器,有漏洞会马上修复,这是很安全。所以决定采用bitwarden并架设自己服务器保存账号安全。当然有人会说服务器也不安全,服务器使用阿里支、腾讯云还是比较安全。还有个好处就是可以把私密东西以附件加密形式上传到服务器。
效果图
服务器图
图1
window版本图
图2
搭建环境
万网购买域名:xxxx.xyz
腾讯香港云主机:ubuntu 18.04 (必须大陆外云主机,在大陆域名要备案,较复杂)
服务软件:bitwarden_rc (官网bitwarden使用net和MSSQL,对主机要求较高,bitwarden_rs根据bitwarden编译写,使用sqlite数据,对主机要求不高)
研究以下方案都未成功,特记录碰到困难,避免其他人踩坑
https://www.xpnas.com/mip/25.html (candy不能获取证书,导致进行不下去)
Docker 自建 Bitwarden 密码服务器 - 有意 (网站搭建成功,但一直创建不了用户,如 求教,安装bitwarden_rs,创建用户报错-美国VPS综合讨论-全球主机交流论坛 - Powered by Discuz!)
快速配置 HTTPS - My Nook (和上面一样,最后原因是未使用https,导致程序不能正常运行)
主要根据上述mynook教程步骤来搭建,但万网域名使用acme一直没办法获取证书,深入讲解搭建成功步骤,避免其他人入坑。
搭建整体思路
购买域名,域名指向云主机,域名申请https安全认证获取证书,搭建nginx服务用于反向代理,把用户输入网址代理到bitwarden服务,bitwarden服务使用docker容器进行启动。全程传输使用https加密传输。
域名配置
上述IP填写你主机IP
证书获取
阿里云开发者社区-云计算社区-阿里云(文章无图,补几张图)
审批通过,会短信通知,把证书下载保存,有2个文件3027402_xxxx.xyz.key、3027402_xxxx.xyz.pem。
docker安装
根据Ubuntu Docker 安装 | 菜鸟教程一步步安装,便可成功,"使用 Shell 脚本进行安装"章节不用看
nignx安装
不要偷懒直接使用apt install nginx安装,这样安装省事,但没有带ssl加密模块。
手动编译安装: ubuntu安装nginx_小雪的博客-CSDN博客_ubuntu安装nginx,主要看下载nginx模块安装章节, Index of /download/选择版本下载,我选择是nginx版本为1.14.0,文中对应版本改成1.14.0
编译nginx ssl模块
配置所有
全程以root账号操作,其他账号也行
cd ~ && mkdir bitwarden && cd bitwarden
pwd# 应当输出 /home/username/bitwarden
准备配置文件
cat >> config.env <<EOF
SIGNUPS_ALLOWED=true
DOMAIN=xxxx.xyz
DATABASE_URL=/data/bitwarden.db
ROCKET_WORKERS=10
WEB_VAULT_ENABLED=true
EOF
准备服务描述文件:
cat >> docker-compose.yml <<EOF
version: '3'
services:
bitwarden:
image: vaultwarden/server:latest
container_name: bitwarden
restart: always
volumes:
- ./data:/data
env_file:
- config.env
ports:
- "6666:80"
EOF
全文红色可以自己修改,但多处修改需保持一致
配置反射代理和https
这二货可以同时在nginx.conf配置,需要了解详细内容项见 Nginx实现https反向代理配置_.... 永远年轻,永远热泪盈眶-CSDN博客_https 反向代理
我给出最简单傻瓜方式
1.证书申请完,把3027402_xxxx.xyz.key、3027402_xxxx.xyz.pem拷贝到云主机/root/bitwarden目录下面,如下图
2.把文章尾部nginx.conf配置替换/usr/local/nginx/conf/nginx.conf
3./usr/local/nginx/sbin/nginx -t测试配置是否成功
4.成功后/usr/local/nginx/sbin/nginx -s reload启动nginx
5.进入/root/bitwarden以当前配置启动docker, docker-compose up -d
操作简单命令
docker-compose up -d 以配置 启动docker
docker-compose down docker关闭
/usr/local/nginx/sbin/nginx -s reload 重启
/usr/local/nginx/sbin/nginx -s stop 关闭
/usr/local/nginx/sbin/nginx -t 测试配置
启动都成功,进入xxxx.xyz,就会看到图1效果
其他客户端配置
进入软件首页,点击Settings设置自己服务器
进入后看到图2效果
总结配置项如下图
数据备份
很多文章写到上面就完成。但实际应用中,往往需要对数据进行备份,万一主机损害导致数据全部丢失,那很痛苦。备份有很多种方式,比如直接用dropbox脚本上传备份等。正好我有2台主机(亚马逊aws可以免费申请使用一年),master主机提供bitwarden服务,slave主机提供备份。
1.设备master主机免密码登录到slave主机,master主机生成SSH密钥和公钥(已有跳过这步),ssh-keygen -t rsa,一直回车就行
2.把master公钥上传到slave上,实现免密码登录,中间会要求输入slave密码。ssh-copy-id username@slave-server-ip
3.master主机开定时任务,我设置为每周天早上6点30分进行同步,30 6 * * 0 rsync -auz -e 'ssh -p 16666' /root/bitwarden/data username@slave-server-ip:bitwarden/。/root/bitwarden/data是master bitwarden数据目录,16666是slave远程ssh登录端口。
关注扫描下面图片,一种非程序员思想提升思维。
注:
client_max_body_size配置文件上传大小
nginx.conf 配置内容如下
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name xxxx.xyz;
rewrite ^(.*) https://xxxx.xyz$1 permanent;
location / {
root html;
index index.html index.htm;
}
}
server {
listen 443 ssl;
server_name xxxx.xyz;
client_max_body_size 500m;
ssl_certificate "/root/bitwarden/3027402_xxxx.xyz.pem";
ssl_certificate_key "/root/bitwarden/3027402_xxxx.xyz.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
proxy_pass http://127.0.0.1:6666;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}