だらだら〜個人事業〜

HatenaDiaryから引っ越してきました。Githubもnyakagawanです。

KeePassでパスワード管理

おそらく明日到着するはずのmacbookproに環境を移行するため、パスワードとかをどうしようか…ということでその辺りさがしてみる。今までブラウザについてるパスワード記憶機能だけ使ってて、ブラウザを変えるたびにパスワードがわかんなくなったりして、もういい!ってことになること数回。そういうことを無くすためにもパスワードマネージャ的なソフトを探した。
結局KeePassってやつにすることにした、理由は

  • パスワードのDBをオンラインストレージにおいて別環境と同期させれるらしいから
  • ライフハッカーブログ(だっけ?)で『これいいよっ』的な紹介をされてたから

の2つ(ぉぃ)。Roboなんちゃらも前にチャレンジしたけど理由は忘れたが今は使ってない。ので除外。ほかにもいろいろあったけど適当にこれにした。

KeePassで何をやったか

  • DropBox使ったDB同期
    • つってもMacboocPro来てないからホントに同期の環境が作れたかわかんないんだけどw解説サイトのいうとおりにしただけ。
  • 現ブラウザのFireFoxからパスワード情報Export+KeePassでImport
    • これも解説サイトぐぐってやった。これはすぐ出来た。
  • 旧ブラウザのChromeからパスワード情報Export+KeePassでImport
    • これがぐぐっても情報がでやしない。ググり方に問題ありそうだけど…。結局次のようにしてこれを行った。

Chromeの記憶してるパスワード情報をExport

これはこの海外サイトで落とせる。ChromePassというのでやれた。Chromeのパス情報をCSVでエクスポートできる。
んで、KeePassにインポートだ!と思って、KeePassでインポートファイル形式を選択する。たぶん『一般的なCSV形式』、これだ。と思ってやってみる(KeePassには日本語パッチを当ててる)結果は出来てるように見える。カラムを適切に入れ替えないとタイトルにURLが入ったりするけど、まぁ出来てる。
…と思ったけど、『FiledID_Password』とかの設定が入ってない。これはKeePass上のパスワードレコードをダブルクリックして、高度タブの文字列フィールドに出ているはずのもので。FireFoxからインポートしたときは何もしなくてもここに設定されてたので、たぶんあったほうが良いものなのだろう。(いらないかもしらん)

FiledID_Password(と、FieldID_UserName)がほしい

ということで、FireFoxのエクスポートファイル(XMLなんだけど)の仕様は分かっているので(さっきKeePassにインポートするときにエクスポートしたやつがあるので)、ChromePassで吐いたCSVPerlXMLにコンバートすることにした。割とどうでもいいことに時間を使ったのでちょっとどうなの?とは思った。

Perl初心者なのです

Perl初心者だからこそ!なんか組みたくなったので組んだ。結果出来たし、いつもと違って詰まったりしなかった。思ったのは、Perlってやっぱり便利なんだねってこと(C++と比べて)。今回最初に書いたPerlスクリプトから最終的なものになるまで色々調べつつやってたら。(基本的な書き方なんだけど)すごく短く、すっきりしたスクリプトになった。このすっきりしてく過程でちょっとした快感を味わった気がする。最後には空行とかDebugPrint含めて35行だからなぁ、俺でこれだからもっと短くなるんだろうなー。エラーチェック皆無だけどw

せっかくだから俺はこのソースをさらすぜ

なんか間違ってるかも知れない。まぁPerlCGIで使うための入門書1冊読んだぐらいの知識なので…。あと、CSVのカラムは必要なやつ以外手で削除してる。

#! /usr/bin/perl

use warnings;

open( OUT, ">expt.xml" );
print "0: open expt.xml\n";

print OUT <<EOT
<xml>
<entries ext="Password Exporter" extxmlversion="1.1" type="saved" encrypt="false">
EOT
;

my $srcCsvPath = $ARGV[ 0 ];
print "src csv path : $srcCsvPath\n";

open( IN, $srcCsvPath );
print "1: open $srcCsvPath\n";

while( <IN> )
{
	chomp;	# 改行文字の削除。$_に作用
	my ( $url, $usrNameField, $passwdField, $usrName, $passwd ) = split( /,/, $_, 5 );
	print OUT qq{<entry host="$url" user="$usrName" password="$passwd" formSubmitURL="" httpRealm="" userFieldName="$usrNameField" passFieldName="$passwdField"/>\n};
}
close( IN );

print OUT <<EOT
</entries>
</xml>
EOT
;

close( OUT );

そういや大事なことをわすれてた

肝心のKeePassまだ一回も使ってみてないwwなので、ちゃんとこのインポートとか出来てるかわからんっすwまぁどうせMacセットアップ時にやらんとダメだから放置ー。