そうだ、奥多摩に行こう

KeePassデータベースの定期バックアップ

2008年12月31日

ここ2年ほど、Webで使うパスワードの管理をオープンソースのKeePassで管理している。コミュニティに活気があるせいか、バージョンアップも結構マメにあるので気に入っている…のだけど、データを集約しすぎてKeePassに入れた情報が見れないと何もできないようになってしまった。HDDのバックアップは(これではいけないと思いつつ)適当なタイミングでやっているだけなので、何かの拍子にDBファイルが消えたり壊れたりしたら非常に困ってしまう。なんとかDBファイルだけでも安全な場所へコピーせねば…とずっと思っていたので、やってみる事にした。

今使っているXREAは非公開ディレクトリがあるので(ロリポの時は使えなかった)、とりあえずここに /backup というディレクトリを作って入れていくことにした。普段からファイルのアップロードにはFFFTPを愛用しているので、コマンドラインなんかで便利な使い方はできないかな?と思ってオンラインヘルプを見てみたら、トップにいきなり*FFFTPは手動操作がメインであり、自動化を目的として作成されておりません。*と書いてあって涙目。

FFFTP は自動処理を目的とした FTP クライアントではありません

以前より、FFFTP をコマンドライン経由で自動化処理して用いる事を検討している方が多いですが、FFFTP は手動操作がメインであり、自動化を目的として作成されておりません。

コマンドラインは起動時の自動処理等、最小限の動作しか対応されていません。

自動化を目的とした FTP クライアント は他にあると思います。お探し下さい。

俺が思いつくくらいだし要望多かったのね…と思いつつ、まったく出来ないわけじゃなさそうなのでコマンドラインのページを見てみることにした。
FFFTPのコマンドラインでできることは大まかに分けて二種類あるらしく、下記のような感じらしい。

  1. ホスト登録しておいた場所にミラーリングアップロード/ダウンロード
  2. ftp://yourname:password@hostnameのような書式でダウンロード

2番の方はブラウザやエクスプローラのアドレスバーに入れるのと同じなので、今回の目的には合わなさそうな感じ。ダウンロードするつもりなら良かったんだけどねぇ…。でもそれだったらブラウザでできちゃうしねぇ…。
エクスプローラでFTPにアクセス
こんな感じ。

1番の方はミラーリングしかできない模様。ミラーリングだとフォルダの中身全部が対象になってしまう…が、KeePassだし1MBちょっとなのでまぁいいかと思ってやってみる。

  1. KeePass用に新しく設定を作る。設定名は適当に入れて、サーバに接続するためのホスト名、ユーザ名、パスワードを入力。
  2. ローカルの初期フォルダにKeePassのインストールフォルダを指定。
  3. ホストの初期フォルダにバックアップしたい場所を指定。
    keepass01
  4. スタートメニューから「ファイル名を指定して実行」を選び、FFFTPの実行ファイルまでのフルパスを書く。C:\Program Files\FFFTP\FFFTP.exe のような感じ。
  5. その後にスペースを入れて**-s “設定名” -m -f -q**と入力する。
    keepass02

上記の準備ができたらOKを押すと、設定を間違えていなければ新規でFFFTPが立ち上がり、指定したディレクトリにファイルがバババーっとアップされて、作業が終わったら自動で閉じる。再度FFFTPを立ち上げて確認してみると、ちゃんとアップロードされている。
これをタスクスケジューラに登録したり、ショートカットに入れて起動すればバックアップ完璧やん?…と思っていたら、毎回上書きアップロードされるので、壊れたファイルをアップしたら元も子もない事に気づいてしまった。

これがFFFTPのいう最小限の動作か…、他のFTPクライアント使いにくそうだしなぁ…と困っていたら、windowsのコマンドラインにFTP機能があった。

windows コマンドライン ftp - Google 検索

この辺を見ながら触っていたら、指定したファイルに日付をつけてアップできるようになった。
操作の流れはこんな感じ。

  1. KeePassのDBファイルをコピーし、ファイル名の後ろに日付を付ける
  2. 1で作ったファイルをFTPコマンドでアップロード
  3. 1で作ったファイルを削除
    これをバッチファイルにまとめた。

バッチファイルは通常のものとFTP用の2つを用意した。(FTP用のコマンドは、なぜか別ファイルにしないと使えなかったので)

通常のバッチファイル。keepass_backup.bat

@echo off
rem Keepassのインストールフォルダを指定
set KPDIR="E:\Application\bin\KeePass-1.14" ←ここを変える

rem --------------------------------------------
rem 呼び出し位置を保存
for /f "delims=" %%A in ('cd') do set MYDIR=%%A

rem ファイル名につける日付を設定
set DT=%date:~0,4%%date:~5,2%%date:~8,2%

rem KeepassのDBファイルをコピー
cd /d %KPDIR%
copy Database.kdb Database_%DT%.kdb

rem FTPでアップロード
cd /d %MYDIR%
ftp -s:server.txt

rem ファイル削除
cd /d %KPDIR%
del Database_%DT%.kdb

FTP用のバッチファイル。server.txt

open 自分のサーバ名  ←ここを変える
ログインID  ←ここを変える
パスワード  ←ここを変える
lcd ローカルにあるKeePassのインストールディレクトリ    ←ここを変える
cd アップロードしたいサーバのディレクトリ  ←ここを変える
binary
put Database_*.kdb
close
quit

上記二つのファイルを同じ階層に置き、

  • keepass_backup.batの方の3行目をKeePassの自分のマシンに合わせたインストールフォルダに変更
  • server.txtの上から5行までを、FFFTPで指定したように変更

とすれば、Database.kdbのみを日付つきでサーバにバックアップできるようになった。あとはこのバッチをタスクスケジューラに入れれば完成。これで一安心…かな。
というか、そろそろまじめにバックアップの方法を考えねば。