Keepass 2.x 之 同步与触发器

时间:2021-06-17 15:09:27

同步

之前用的 Keepass 1.x, 要实现工作电脑和个人电脑上的数据库文件同步,使用的是第三方的网盘同步。但有个问题就是,个人不习惯设置同步网盘开机启动,所以有时候工作电脑上的改动还没有同步上传、个人电脑上又修改了数据库文件,这样就会产生冲突。之前也看到有第三方插件可以提供同步功能,不过没有去尝试使用过。

现在,Keepass 2.x 提供了对同步功能的原生支持,支持“与文件同步”或者“与 URL 同步”。其中,URL 同步测试支持 FTP 以及 HTTP/WebDAV 协议。

Keepass 2.x 之 同步与触发器

这里的同步方法有两种:

一种是我们通常使用的,数据库文件位于本地磁盘上,需要同步时选择菜单“文件->同步”,再选择需要同步的本地或 URL 文件。需要注意的是,第一次同步之前需要先将你的数据库文件复制到需要同步的位置,因为选择同步文件时需要指定待同步文件的完整路径,如:ftp://xxx.edu.cn/KeepassSync/MyBase.kdbx.

另外一种方式,则是直接打开 URL 数据库文件使用。

Keepass 2.x 之 同步与触发器

这样我们每次改动后,选择保存(注意不是另存为),都会自动将改动保存到打开的 URL 文件中。

 

以上就是同步的基本用法,基本是靠手动完成同步操作。如果想偷懒,让软件更加自动化的同步操作,则需要使用到 Keepass 2.x 的新功能:触发器

触发器

触发器和同步功能一样,也是 Keepass 2.x 的新增功能,用它来辅助实现自动同步操作,简直就是绝配。

触发器位于“工具”菜单下,点击后弹出“触发器”窗口,这里有一个“启用触发系统”复选框,用来控制所有的触发器是否启用。然后点击“添加”按钮,出现“添加触发器”窗口。

Keepass 2.x 之 同步与触发器

在“属性”选项卡中,有三个复选框:

“启用”:控制当前触发器是否启用;

“启动时打开”:控制 Keepass 软件启动后该触发器是否打开,这个主要用于其他触发器来触发它的开关状态(后面会讲到)。只有之前说到的“启用触发系统”以及上面的“启用”复选框都选中,并且触发器打开时,该触发器才有效。

“执行动作后关闭”:容易理解,就是该触发器只执行一次,当然同样可以通过其他触发器再把它打开。

另外,需要注意的是,触发器是属于软件层面的,而不是数据库下的属性,即同步时不会同步触发器。

还有,在上面所说的“启动时打开”复选框,它下面说明是“触发器将在 Keepass 启动时打开”。这样,如果你同时选择了“执行动作后关闭”复选框,或者通过其他触发器将其关闭。则当你只关闭了数据库(注意 Keepass 软件没有关闭),然后重新打开数据库时,该触发器不会打开。不过这种情况很少遇到,一般我们使用都是只用一个数据库文件,关闭时也是直接退出软件。

 

在“事件”选项卡下,点击“添加”按钮,弹出“事件”添加窗口:

Keepass 2.x 之 同步与触发器

可以看到可供选择的触发事件很多,并且如果选择多个事件后,只要有一个事件发生,则该触发器就会被触发。

 

在“条件”选项卡下,同样点击“添加”按钮,弹出“条件”添加窗口:

Keepass 2.x 之 同步与触发器

其中可供选择的条件如下:

Keepass 2.x 之 同步与触发器

注意如果选择多个“条件”的话,只有当所有的条件都满足时,该触发器才会进行接下来指定的“动作”。

 

在“动作”选项卡下,点击“添加”按钮,弹出“动作”添加窗口:

Keepass 2.x 之 同步与触发器

可以选择的动作也很多:

Keepass 2.x 之 同步与触发器

如果选择多个动作,则这些动作会按先后顺序进行。动作顺序可以在“动作”选项卡中调整。

按照官方帮助中的说法,如果某个动作无法进行下去,则其下面的动作也不再进行。

Actions are performed consecutively; if one action fails, typically the execution of the event is aborted (i.e. all following actions aren't performed).

但实际操作发现,比如设定同步动作,一个同步到 URL 文件,一个同步到本地磁盘其他地方,并且同步到 URL 文件的动作在前。断网情况下,同步到 URL 文件动作会弹出错误提示,但同步到本地磁盘还能继续成功运行。

因此,个人理解是如果动作之间没有关联的话,即使前面的动作无法进行,也不影响后续动作。当然,这里还是建议把同步到本地磁盘这一动作放到前面,毕竟一般情况下它都不会出现问题的。

注意无限循环问题:

使用触发器时需要注意的一个问题就是,可能一个触发器会触发自身,这样程序就会陷入无限循环之中。比如,之前自己设计一个“保存后同步”的触发器,由于软件的同步机制相当于保存,因此就出现了无限循环问题。官方帮助页面有这方面的详细说明和解决办法,部分翻译如下:

解决思路:在触发器执行我们想要完成的动作之前先关闭自己,然后再执行指定的动作,执行完后再打开自身。

解决步骤:

1. 首先在“动作”窗口选择动作:“更改触发器 开/关 状态”

Keepass 2.x 之 同步与触发器

触发器名称留空,表示自身,新状态改为“关闭”。

2. 再自行添加自己需要的动作;

3. 同1,只是新状态改为“打开”。

示例

保存后同步

  1. “属性”选项卡,命名该触发器,如 SavedSync.(注意,后面动作选择“更改触发器 开/关 状态”时触发器名称只能手动输入,无法选择,所以这里命名还是从简,具体描述可以写到下面的注释栏。)同时勾选“启用”和“启动时打开”复选框。
  2. “事件”选项卡,添加事件,选择“已保存数据库文件”,下面的文件/URL - 比较和过滤器可以无视。不过如果有多个数据库文件需要同步,则可以根据待保存的数据库文件名设定后续同步动作。这里我的设置如下:

    Keepass 2.x 之 同步与触发器

  3. “条件”选项卡不加入任何条件。你也可以选择同步到 URL 文件时选择条件“远程主机可以连接(ping)”,这样只有当 URL 文件可以访问时才同步。不过我倾向于不加入这个条件,这样即使后面无法完成同步操作,也会有弹窗提示,让我们能更清楚当前的同步状态。
  4. 最后“动作”选项卡就需要注意前面说到的无限循环问题了。

    首先关闭当前触发器;

    然后添加动作“与一个文件/URL 同步当前数据库”,在下面输入 “文件/URL” 地址,如果是 URL 文件,下面还要输入 IO 连接用户名和密码;

    最后打开当前触发器。

打开数据库后同步

这个触发器的操作和上面的基本相同,不同点如下:

  • “事件”选项卡中,添加的事件选择“已打开的数据库文件”。
  • “动作”选项卡中,关闭和打开的触发器名称要写上面的“保存后同步”触发器名称。以为同步也是一种保存,这样就不会打开数据库同步后,又触发了保存同步。

官方帮助里还提供了更多的用法示例,可以前去看看:http://keepass.info/help/kb/trigger_examples.html.

WebDav 同步测试

由于学校里提供了个人的 FTP,因此我现在是将个人数据库同步到该 FTP 上。一般没有自己 FTP 的,就得找一些支持 FTP 或 WebDav 协议的网盘了。

为了测试该功能,在网上找到了一个支持 WebDav 协议的网盘:Box. 注册后通过地址 https://www.box.com/dav/ 就能访问到自己的网盘文件了。

不过测试虽然可用,但速度较慢,期间还造成 Keepass 软件未响应的情况,好在半分多钟后恢复并同步成功。而且由于是国外的网盘,不确保以后能否访问(写作此文时 Dropbox 主页已无法打开)。

所以,大家还是要慎重考虑同步的地方,毕竟这个数据库要是丢了可真是损失惨重。