🔖
KDBX(KeePass database)のクロスプラットフォームでの同期方法
執筆途中
実際のスクリプトなど具体的な要素は後ほど追記します。
下準備/予備知識
- KeePassXC(CLI)の導入
- 基本思想は「KeePassXC(CLI)のmerge機能でKDBX間の情報交換をする」
基本手順
- 各クライアントのローカルディレクトリに独自で読み書きする
.kdbxを置く。masterkeyはkeyfileのみとし、安全な場所に置く。 - 任意のクラウド上に同期用の
.kdbxを置く - 各クライアントが独自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