gpg2の鍵作成にハマる

pgpの技術は昔から使っていたのですが,しばらくサボっている間にLinuxディストリビューションのデフォルトpgpがGnuPG2になっていて,かなりハマりました.

まず,FreeBSDX Windowで叩いた時は,何もなかったので気づきませんでした.

$ 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 (署名のみ)
あなたの選択は? 1
RSA 鍵は 1024 から 4096 ビットの長さで可能です。
鍵長は? (2048) 
要求された鍵長は2048ビット
鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n>  = 鍵は n 日間で期限切れ
      <n>w = 鍵は n 週間で期限切れ
      <n>m = 鍵は n か月間で期限切れ
      <n>y = 鍵は n 年間で期限切れ
鍵の有効期間は? (0)
 は無期限です
これで正しいですか? (y/N) y

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

本名: hoge
電子メール・アドレス: hoge@example.com
コメント: 
次のユーザIDを選択しました:
    "hoge <hoge@example.com>"

名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? O
秘密鍵を保護するためにパスフレーズがいります。

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

gpg: 信用データベースの検査
gpg: 「ギリギリの信用」3、「全面的信用」1、PGP信用モデル
gpg: 深さ: 0  有効性:   1  署名:   0  信用: 0-, 0q, 0n, 0m, 0f, 1u
pub   2048R/0155DA52 2014-04-11
   フィンガー・プリント = 7470 D60A 85CA 4ECE B30D  EB0E 9BAC 1988 0155 DA52
uid                  hoge <hoge@example.com>
sub   2048R/7A3B6ADC 2014-04-11

これが,Amazon E2にsshでログインして同じことをやると,エラーが出ました.

GnuPG needs to construct a user ID to identify your key.

Real name: hoge
Email address: hoge@example.com
Comment: 
You selected this USER-ID:
    "hoge <hoge@example.com>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.

can't connect to `/home/hoge/.gnupg/S.gpg-agent': Connection refused
gpg-agent[26217]: command get_passphrase failed: Operation cancelled
gpg: cancelled by user
gpg: Key generation canceled.

これはうまくいっているFreeBSDのプロセスを見ると分かりました.自動的にgpg-agentが立ち上がっていました.
手動で立ち上げます.

$ gpg-agent --daemon -v --use-standard-socket                                                                                                         
gpg-agent[27457]: listening on socket `/home/hoge/.gnupg/S.gpg-agent'
GPG_AGENT_INFO=/home/hoge/.gnupg/S.gpg-agent:27458:1; export GPG_AGENT_INFO;
gpg-agent[27458]: gpg-agent (GnuPG) 2.0.14 started

こちらだとソケットが出来ないので注意.

$ gpg-agent --server -v --use-standard-socket
OK Pleased to meet you

gpg-agentを立ち上げても,ssh経由でログインして,他のユーザにsu/sudo suした場合はダメなことが分かりました.
その強引な解決方法は次回.
それが書いてあったのは,こちらです.
GnuPG - ArchWiki