LinuxのCUIで管理するパスワードマネージャ「gpgpwd」コマンド

先日、いくつかチームでのパスワード管理マネージャについて紹介したが、今回は個人向けのパスワードマネージャ。
で、GUIで管理するタイプではなく、コンソールから利用できるタイプの「gpgpwd」というものを見かけたので、これについて紹介する。

1.インストール

まずはインストールの前に、前提となるパッケージを導入する。

apt-get install libjson-perl libtry-tiny-perl gnupg xclip git gnupg-agent # Debian/Ubuntu系の場合
yum install perl-JSON perl-Try-Tiny gnupg xclip git # CentOSなどRHEL系の場合

次に、以下のコマンドでgpgpwdをインストールする。

git clone https://github.com/zerodogg/gpgpwd
cd gpgpwd
sudo make install

これでインストールができた。

2.使ってみる

2-1.GPG鍵ファイルの作成

さて、それでは実際に使ってみよう。
まず、gpgpwdで保持するパスワードを暗号化するため、GnuPG鍵を作成する。

[root@BS-PUB-CENT7-01 ~]# gpg --gen-key
gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

ご希望の鍵の種類を選択してください:
   (1) RSA と RSA (デフォルト)
   (2) DSA と Elgamal
   (3) DSA (署名のみ)
   (4) RSA (署名のみ)
あなたの選択は? [Enter]
RSA 鍵は 1024 から 4096 ビットの長さで可能です。
鍵長は? (2048) [Enter]
要求された鍵長は2048ビット
鍵の有効期限を指定してください。
         0 = 鍵は無期限
        = 鍵は n 日間で期限切れ
      w = 鍵は n 週間で期限切れ
      m = 鍵は n か月間で期限切れ
      y = 鍵は n 年間で期限切れ
鍵の有効期間は? (0) [Enter]
(null)は無期限です
これで正しいですか? (y/N) y

GnuPGはあなたの鍵を識別するためにユーザIDを構成する必要があります。

本名: TestID
電子メール・アドレス:
コメント:
次のユーザIDを選択しました:
    "TestID"

名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? O</pre>

その後、パスフレーズやランダムバイトの生成が行われるので、コンソールに表示されているメッセージに従って処理を行う。  
(結構時間がかかる)

```shell
たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動かす、
ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、乱数生成器に
十分なエントロピーを供給する機会を与えることができます。
gpg: 鍵961B1619を絶対的に信用するよう記録しました
公開鍵と秘密鍵を作成し、署名しました。

gpg: 信用データベースの検査
gpg: 「ギリギリの信用」3、「全面的信用」1、PGP信用モデル
gpg: 深さ: 0  有効性:   1  署名:   0  信用: 0-, 0q, 0n, 0m, 0f, 1u
pub   2048R/961B1619 2016-09-21
   フィンガー・プリント = 2326 B78D 1278 DD34 0398  A082 7273 6E70 961B 1619
uid                  TestID
sub   2048R/07CBBA98 2016-09-21

2-2.パスワードの登録・確認

次に、実際にパスワードの登録をしてみよう。
以下のコマンドでパスワード登録が行える。なお確認時は指定されたパスワード名で部分一致で検索をかける。
それぞれのコマンドの実行前後にはGnuPG鍵のパスフレーズを求められる。

gpgpwd set パスワード名 # パスワードのセット
gpgpwd get パスワード名 # パスワードの確認(パスワード名で検索)

[root@BS-PUB-CENT7-01 ~]# gpgpwd set TestPassword
Adding an entry for TestPassword

Random password: FqzZRLccV?3&bPx
  Enter /help for help.
  Enter a password to use a custom password.
  Just press enter to use the random password.
Password> TestPassword

  Enter a username for this entry.
  Just press enter to not store any username.
Username> root
[root@BS-PUB-CENT7-01 ~]# gpgpwd set PasswordTest
Adding an entry for PasswordTest

Random password: 06c5k_AX8q=2Va#
  Enter /help for help.
  Enter a password to use a custom password.
  Just press enter to use the random password.
Password> TeST

  Enter a username for this entry.
  Just press enter to not store any username.
Username> test
[root@BS-PUB-CENT7-01 ~]# gpgpwd get Password
Name                  Password                           Username
----                  --------                           --------
PasswordTest        : TeST                               test
TestPassword        : TestPassword                       root

うーん…個人利用であれば悪くなさそうな気がする。