1、原理
Keepass是Windows下的一个开源的密码管理器,由于各种密码越来越多,各种社工库的泄漏也越来越频繁,故直接对不同平台使用相同的密码越来越不安全,即使现在有了很多二次验证,手机验证的方式,但是密码的安全性和可记忆性依然是一个很大的问题。
尝试过多种不同的密码方案,比如对于不同平台设置相同密码,仅包含平台信息的部分不同;例如使用LastPass软件存储密码,但是一方面是记忆量太大,另一方面也是价格和费用问题,所以到最后还是回到了最原始的Keepass上面,Keepass虽然是PC软件,但是在插件,同步,多平台支持上并不比现在云密码软件差,本文作为记录说明近期实践的Keepass多平台使用的方案。
Keepass最核心的就是kdbx密码库文件,只要密码库同步,则软件读取密码库内的内容也是同步的,故最基本的就是把密码库放置于任何一种同步盘,本例选择Google Drive,包含历史记录等功能,天然防止了文件的丢失也可以恢复不同时间的历史版本。
对于不同版本的程序和同步配置列表如下
Openwrt:Rclone同步GoogleDrive的kdbx文件,并挂载共享
Windows:官方版客户端,开源,同步GoogleDrive或者使用SFTP同步均可
MacOSX:KeePassXC客户端,开源,Rclone挂载SFTP同步Openwrt的kdbx文件
2、Keepass使用Google Drive密码库
Keepass默认不支持通过Keepass创建和同步密码库,需要安装一个插件开启云盘同步功能,不仅具有同步Google Drive功能,还可以同步其他云盘,这里不一一列举。
插件名称:KeeAnywhere
首先打开Keepass的插件文件夹,将插件的release版本plgx文件拷贝进去后重启Keepass软件即可
然后点击“工具”——“KeeAnywhere Settings”打开插件配置并添加云盘,一切按照插件的提示进行即可
添加完成后就可以按照常规方式创建密码库,并将密码库的存储选择在Google Drive上,同时可以尝试同步一些密码。
3、OpenWRT同步Google Drive
由于Google Drive并不是在任何地方都可以无障碍访问,且不是任何平台的Keepass客户端都具有云盘同步的功能和插件,所以使用一个较为安全的方法中转一下Google Drive的存储是非常必要的,这里选择使用SFTP方式在各个客户端之间同步密码库,但SFTP是需要一个提供者的,这里使用Openwrt作为SFTP的提供者,本身完全同步Google Drive中的密码库,然后再通过SFTP的方式共享给其他平台的客户端。
3.1、OpenWRT通过Rclone同步Google Drive
OpenWRT拥有了SFTP服务器功能之后,可以通过任意形式连接OP的SFTP就能共享文件,但是本身OP需要通过GD中的密码库,此时通过Rclone来同步Google Drive即可。
首先在OP中安装Rclone,由于作者是直接自行编译OP故不确认是否有OPKG的安装方式,但无论如何作为全平台支持的软件,Rclone提供多种安装方式,至少可以在OP当中使用Binary的形式,或者自行使用官方安装脚本,安装方式见下
安装完成之后可以通过运行rlone命令查看是否安装成功
root@OpenWrt:~# rclone version
rclone v1.53.0_2020-09-02
- os/arch: linux/amd64
- go version: go1.16.5
安装完成之后可以配置Rclone在OP当中同步Google Drive,官方教程如下,过程相对容易
总之完成Google Drive的配置添加之后,可以通过命令rclone config看到相关配置
root@OpenWrt:~# rclone config
Current remotes:
Name Type
==== ====
google drive
e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q>
此时可以使用该配置挂载Google Drive到本地任意目录即可,方法如下
root@OpenWrt:~# rclone mount google:/keepass /mnt/googledrive --daemon
该命令意思是挂载google配置下的根目录/keepass到本地/mnt/googledrive下,同时使用--daemon在后台运行,挂载完毕不报错就算成功,等待一段时间就可以在本地目录中看到已经同步的密码库,此时对密码库的修改都会无缝同步到Google Drive中,Google Drive的修改也会直接同步到本地。
3.2、给Openwrt增加SFTP功能
Openwrt默认是没有SFTP sever服务的,需要专门安装一个ipk才可以支持,通过如下命令可以安装
opkg instal openssh-sftp-server
当然也可以直接通过luci安装,总之要为openwrt加上openssh-sftp-server软件包。加上软件包之后任何支持SFTP的软件都可以连接上Openwrt。
4、MacOS X平台
对于MacOS X平台,几乎只有一个客户端可以选用,并且功能也算是强大,就是KeepassXC,该客户端几乎包含所有常用功能,并且完全开源,安全性有保障。
4.1、安装KeepassXC
建议直接使用HomeBrew安装KeepassXC,也是官方推荐的安装方式:
brew install --cask keepassxc
安装完成之后可以在Launchpad当中找到程序,直接打开即可,但此时还需要在Mac当中连接到远程OP的密码库中才行,因为KeepassXC默认是不支持云盘同步的功能,所以必须使用第三方同步挂载密码库到本地,再由KeepassXC进行管理。
4.2、Mac安装Rclone同步SFTP
作者选用Rclone来同步本地OpenWRT中的SFTP密码库,由于OP本身就和Google Drive同步,所以只要连接到OP的密码库,任何增删改查都可以反馈到Google Drive当中,达到全平台同步的目的。
首先不能通过HomeBrew在Mac中安装Rclone,因为HomeBrew安装的Rclone没有挂载功能,必须通过官方脚本或者下载Binary的形式使用,同样以官方脚本为准
和OP一样,安装完成之后通过运行rclone version可以看到具体信息和版本号,这里需要挂载的就不是Google Drive了,而是OP当中的SFTP共享,同样通过rclone config进行,下面摘录官网的挂载流程:
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
name> remote
Type of storage to configure.
Choose a number from below, or type in your own value
[snip]
XX / SSH/SFTP Connection
\ "sftp"
[snip]
Storage> sftp
SSH host to connect to
Choose a number from below, or type in your own value
1 / Connect to example.com
\ "example.com"
host> example.com
SSH username, leave blank for current username, $USER
user> sftpuser
SSH port, leave blank to use default (22)
port>
SSH password, leave blank to use ssh-agent.
y) Yes type in my own password
g) Generate random password
n) No leave this optional password blank
y/g/n> n
Path to unencrypted PEM-encoded private key file, leave blank to use ssh-agent.
key_file>
Remote config
--------------------
[remote]
host = example.com
user = sftpuser
port =
pass =
key_file =
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y
总之挂载完毕之后,通过rclone config命令可以看到如下提示就算成功
~ rclone config ✔ │ 10:31:57
Current remotes:
Name Type
==== ====
keepass sftp
e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q>
最终可以通过rclone mount挂载到Mac的任意本地文件夹,这里以~/.keepass文件夹为标准,挂载方式如下:
rclone mount keepass:/mnt/googledrive /Users/jonchil/.keepass &
最后的一个&符号代表在后台运行,等待一会儿之后就可以在相关目录查询到挂载同步的内容,这样以来Mac可以通过SFTP同步OpenWRT当中的密码库,而任何增删改查都通过OP当中的Google Drive同步,达到全平台同步的目的。
这里需要注意的是,任何平台客户端通过SFTP的时候,可以给OP分配外网IP和域名解析,同时在OP当中开放SSH端口,这样就可以使用域名挂载相应的SFTP,如果希望更高的安全性完全可以使用证书,这样安全性也是没有问题的。