🔖

KDBX(KeePass database)のクロスプラットフォームでの同期方法

に公開

執筆途中

実際のスクリプトなど具体的な要素は後ほど追記します。

下準備/予備知識

  • KeePassXC(CLI)の導入
  • 基本思想は「KeePassXC(CLI)のmerge機能でKDBX間の情報交換をする」

基本手順

  1. 各クライアントのローカルディレクトリに独自で読み書きする.kdbxを置く。masterkeyはkeyfileのみとし、安全な場所に置く。
  2. 任意のクラウド上に同期用の.kdbxを置く
  3. 各クライアントが独自KDBXに変更を行ったとき、これをクラウドKDBXへmergeする(push&pull)
    ----> 3を自動化すれば同期忘れを防げる

自動化方法

macOSでの設定

  • 発火用.sh...fswatchでローカルKDBXとクラウドKDBXのハッシュを監視して、変更が安定(目安5秒)したら実行用.sh発火
  • 実行用.sh...ローカルディレクトリに一時ファイルとして各KDBXのコピーを作成し、ここでmergeを実行(終わったら上書きで返す)
  • 発火用.shを常駐させる。ログイン時に再始動するように.plistとLaunchAgentでロードされるように設定しておく。

[注意点]

  • merge以外の手段での上書きはNGと考える。ただのファイルとしてKDBXを読み書きすると、KDBXの持つhistory dataを活かせずconflictとsilent overwriteを防げない。
  • KDBXの暗号解除時にKeePassXC(CLI)がパスワードを求めてきたときに自動応答が不可能。 ----> すべてのKDBXをkeyfileのみでロックすることにする。
  • クラウド上のファイルを直接いじるのは権限やAPIの制約で難しいことが多い。 ----> 瞬間的にローカルにコピーを作成してそこに対して作業をすることで妥協。コピー取得から反映までを瞬時に終わらせることで事故を防ぐ。
  • fswatchでなくWatchPathsを発火に使うと、変更後も検知してループする(SSD書き込み/通信/API の無駄遣い)。 ----> 検知から作業完了まですべてをfswatchで監視するのが安全。

Discussion