gpg2(GnuPG2)にハマる

続きです.
gpg2の鍵作成にハマる - なぜか数学者にはワイン好きが多い

X Windowに直接ログインしてpgp --gen-keyをやると,自動的にpgp-agentが立ち上がり,次に自動的にpinentry-qtが立ち上がりパスフレーズの入力が求められます.

ところが,ssh経由でログインした先でgpg --gen-keyをやると,まずは次のようなエラーがでます.

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.

これは,pgp-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 --gen-keyをやると,

You need a Passphrase to protect your secret key.

gpg: problem with the agent: No pinentry
gpg: Key generation canceled.

No pinentry... gpg-agentの方では,こんなエラーが出てます.

gpg-agent[43127]: starting a new PIN Entry
gpg-agent[43127]: can't connect to the PIN entry module: IPC connect call failed
gpg-agent[43127]: command get_passphrase failed: No pinentry
gpg-agent[43127]: handler 0x2840a400 for fd 6 terminated

これは,pinentryが立ち上がるのに失敗しているせいです.原因は,

% ls -l `tty`
crw--w----  1 tetu-s  tty    0,  98 Apr 20 21:40 /dev/pts/1

TTYが自分ユーザ以外は読めなくなっているからです.
あと,No pinentryが出る時は,文字通りpinentryコマンドが入っていないこともあります.
そこで,gpg-agentやpinentryを立ち上げる前,もしsuするならその前に,最初のユーザでパーミッションを書き換えます.

> chmod a+rwx `tty`

gpg --key-genをやったあとには,パーミッションを戻すようにしましょう.

> chdmo 640 `tty`

また詳しく書きます.