Linuxへの移行の実用性確認作業(社会人に成りたての頃、先輩から"feasibility study"という言葉を聞いたのを思い出した。でも、英語じゃなくたっていいのにと、今は思う。が、そういう僕も、ここでは結構英語かぶれしているがw)は本当にあと少しで、昨日は"All set to go!"という題でまとめを書こうとしていたのだが、新たな課題が見つかってしまった。Windowsのパスワード管理ツールRoboFormを、LinuxではKeePassに移行することにしたので、データを移そうとしていた時のことである。

KeePassのページには、RoboFormのパスワード一覧を印刷する時にできるHTMLをインポートできると書いてあって、「それなら楽勝だ!」と、やってみたのだが、実際にはできなかった。いろいろ調べると、RoboFormのバージョンが上がったせいのようだった。古いバージョンでならいいようだが、それが分かる前に、RoboFormのHTMLをKeePassのインポート可能なCSVに変換するプログラムを作り始めていたので、とりあえず頑張ることにした。

余談: RoboFormの出すHTMLは、なんか邪悪で、ユーザ名などに必要もないのに特殊文字(見えないハイフン"­")を挟んでいる。例えば、"user­name"といった感じだ。本当にレイアウトの問題なのか、盗まれてもちょっとだけ安全にしたかったのか、作者がシャイなのだろうか?w

それが動いたら、いくつかの問題が見つかった。

  • PHPの機能では、エンコーディングをうまくUCS2-LEからUTF-8に変換できなかった。→ UCS2なんて調べたくないので原因は不明だが、外部プログラム(昔懐かしきnkf!)で変換した。
  • KeePassにインポートしたら、日本語が出ない。→ KeePassのフォントと設定を修正して対応した。
  • RoboFormのフィールド名とKeePassのフィールドの対応をどうするか(RoboFormのフィールド名・個数は自由だが、KeePassはフィールド名(例: "User name"、"Password")や個数が固定)。→ 問題1
  • サイトのURLが不完全(RoboFormのHTMLには、まともなURLが入っていない。例: "Evernote.com")。→ 問題2
  • ログイン情報のタイトルが欠ける場合がある(例: 「中村藤吉」→「中村藤」) → Windows版では出るので、KeePassの問題と思われるし、他の情報には問題ないので、我慢する。

問題1: フィールド名の問題は悩ましかった。いろいろなサイトが、さまざまなフィールド名を使っているからだ。

余談: 自分でもやってしまうのだが、フィールド名は(外からは見えないから)その場の流れで安直に付けてしまいがちだが、統一して欲しいと思う。昔、そういう流れがあったような気がするが、どうなったのだろう? でも、そういうのって、大抵は過剰な仕様になってしまって、面倒だから誰も使わないんだよね・・・

とりあえず、フィールド名のパターンマッチでしのぐことにした。具体的には、RoboFormのフィールド名に特定の文字列が含まれていたら、KeePassのフィールドに対応させることにした(例: "name"などが含まれていたらユーザ名に、"pass"などが含まれていたらパスワードとする)。

この変換は結構うまく行ったのだが、マッチングが誤って異なる情報が抽出される場合があるし、KeePassのフィールドは固定のために変換後の情報が減るので、いざという時のために、ほとんど全部のオリジナル(RoboForm)の情報をKeePassの追加フィールドに入れることにした。そうすれば、KeePassの情報が欠けていたり間違っていたりした場合でも、(RoboFormを開かなくても)そのフィールドを見れば修正可能になるだろう。

余談: こういうちょっとしたスクリプトを作る時、Unix(Linux)は本当に心地よいと思う。「バッチファイル」では到底無理だろうし、MSの、訳の分からない、数年ごとに節操もなく何個も発表されるさまざまなツール(wshとかPower shellなんてのもあったっけ? 今はBashに回帰?w)なんて使う気にならないからだ。大体、なんでそんなに何個も出すのだろうか? 意図も言語自体も理解不能だ。

一方で、Unix(Linux)のシェルスクリプトは、何十年も変わってない。しかも、動きは単純明快だ。だから、ちょっとしたプログラムを作るのは全く抵抗がない。今回はPHPを使ったが、それだって、大昔の文法のまま使える。

問題2: URLが不完全なのでは、ブラウザと連携する時に、自動記入対象としてうまく認識できない可能性があるので、何とかしたかった。上に書いたように、古いRoboForm(2010年頃のもの)ならURLが入っているのだが、プログラムは動き出してしまったし(この考えは良くないのだが、趣味だから良しとするw)、最新版のRoboFormに対応したかったので、別の手段を模索していたら、RoboFormが生成するブックマークファイルにURLが入っていることが分かったので、それを併用することにした。

苦心してそれらに対応したのだが、最後にKeePassの本質的な問題が見つかった。

RoboFormのフィールドは自由で、webページからいくらでも設定(保存)可能で、何個でも自動記入できるが、KeePassのフィールドは全体として固定なので、それができない(KeePassは、ログインの自動化が主目的のようで、基本的にはIDとパスワードのみ)。

パスワード管理ツールは、通常はサイトへのログインに使うから、URLとID・パスワードが取得できれば問題にはならないのだが、いろいろな情報を記入するページ(例: 郵便の再配達、サポート依頼時の個人情報記入)には使えないのが残念だ。

それで、他のアプリを試してみることにした。が、どれも今一つだった。

  • EnPass
    • RoboFormのHTMLからのインポートはちゃんとできたが、当然、URLは不完全だった。
    • ブラウザへの自動記入が駄目(サイト・ページを認識しない場合があるし、自分で選ばないと記入しない)。
  • Keeper
    • ブラウザへの自動記入が駄目(自分で各フィールドのボタンを押さないと記入しない: 2回目からは1度でいいが)。
    • ブラウザからのデータ保存が不可。

それで、KeePassでどうにかならないか考えたのだが、やっぱり難しいことが分かった。(KeePassHttpを使っているので、)ブラウザに追加フィールドを記入することも可能ではあるが、追加フィールドはフィールド名のアルファベット順に記入されるだけでフィールド名での対応はしないので、何がどのフィールドに記入されるか分からないので現実的でない。

それで、KeePassの用途はログイン時がまあ8割以上だろうし、ブラウザの入力記憶機能も使えるだろうし、同じページに同じことを何度も書くことは余りないので(実際には結構あったのだが)、それらのページでの自動記入は諦めることにした。しばらくWindowsで使ってみて、手間に感じる場合は、再度、EnPassかKeeperを検討しよう。

ちなみに、ログイン情報の数は約600個となった。データ変換は一瞬で終わるが、かなり多いせいか、KeePassの動作は重い。ほとんどは古い情報なので、あとで整理する必要がある(面倒なのでやらない気がするが)。

PS. 今、僕のPCは、全ログイン情報がテキストで記載されたHTMLやCSVになっているので、セキュリティ的に大変危うい状態である。ソフトメーカーは、こういうことにも配慮して欲しいものだ。。。

PS2. つくづく、RoboFormは優秀だと思う。(クラウドを使う、ブラウザ専用のLite版はあるが、)ちゃんとしたLinux版を売れば買うのに。難しいのかな。。。

PS3. もしかして、検索でいらっしゃった方が居るかも知れませんが、このブログでは細かい手順は書きません。というのは、基本的な考え方や方針や普通では分からないことを重視しているからです(もし、全部解説したら、とんでもない分量になるでしょう)。でも、質問して下されば、可能な範囲で回答します。

  •   0
  •   0

コメントを書く

名前    

メール 

URL