2016-04-08 39 views
11

GitHub recently announced verified commitsだから、私はこの機会にGPGを実装してキーの使用を開始しました。コミットに署名するためにgpg-agentをkillする必要があるのはなぜですか?

$ git commit 

You need a passphrase to unlock the secret key for 
user: "John Doe <[email protected]>" 
4096-bit RSA key, ID ABCD1234, created 2016-04-08 

gpg: problem with the agent - disabling agent use 
error: gpg failed to sign the data 
fatal: failed to write commit object 

私はオンライン行って、解決策を探して、(メールプロバイダのための)1つのサイトがkillall gpg-agentに提案し、それが働いた:私はコミットを開始したい場合は、私は次のように取得します。さて、私はパスフレーズを入力してコミットに署名することができます。

gpg-agentは必要ですか?私はそれをインストールしたときにGPGが付属しているようですが、私のコミットに署名するためにそれを殺さなければならないと、私は理解できないものがあるように見えます。 gpg-agentを実行してコミットに署名できるように、これを修正するにはどうすればよいですか?

答えて

16

今日はMacでgpg-agentの使用方法を知りました。私はあなたと同じエラーが発生した後ブロックされました:

gpg: problem with the agent - disabling agent use 

tldr;私はそれをどのように修正したのですか

自分の設定では、pinentry-macをインストールし、gpg-agentを指すように指示することでこれを修正することができ、必要に応じてGUIプロンプトがポップアップしました。

デバッグ上

1. install pinentry-mac 
% brew install pinentry-mac 
2. update gpg-agent conf 
# manually change ~/.gnupg/gpg-agent.conf's pinentry-program to /usr/local/bin/pinentry-mac 
3. update shell's view of PATH contents 
% hash -r 
4. restart gpg-agent 
# however you normally do it (see below for how I run it manually) 

詳細は、私は手動でgpg-agentを再起動することで、これをデバッグ。私は最初、~/.gnupg/gpg-agent.confでコンフィグをコメントアウトし、私は--verboseでのgpg-agentを再起動するには、次のコマンドを実行しました:

% killall gpg-agent && \ 
    eval $(gpg-agent --pinentry-program /usr/local/bin/pinentry --default-cache-ttl 60 --daemon --verbose) 

それから私は、テストコマンドを実行したと我々は両方の上記リストアップしましたエラーを見ただけでなく、新しい1:

# update the MY_GPG_KEY_ID as appropriate 
% echo hi | gpg -e -r $(MY_GPG_KEY_ID) | gpg -d --use-agent 
... 
gpg-agent[60604]: command get_passphrase failed: Device not configured 
gpg: problem with the agent - disabling agent use 
... 

私は最終的にGPG_TTYは私がgpg-agentを起動するために、以下の手順で設定されたなかったこと(this articlethis GPG pageを読んだ後)を実現。だから、かつて私は、変数すべてが「働いていた」という設定:

% killall gpg-agent && \ 
    eval $(gpg-agent --pinentry-program /usr/local/bin/pinentry --default-cache-ttl 60 --daemon --verbose) 
% export GPG_TTY=`tty` 
# Now the below command succeeds 
% echo hi | gpg -e -r $(MY_GPG_KEY_ID) | gpg -d --use-agent 

を、私はさまざまなオプションの多くをしようとしていたこの演習の中では、とpinentry-mac GUIのプロンプターは「ちょうど働いた」ことを発見しました。

回避GUIパスフレーズプロンプター

あなたはGUIのプロンプターがポップアップしたくない場合は、その後、私は次のenv変数は、端末毎に設定されていることを確実にするために十分であろうと思う:

  • GPG_TTY
    • たとえば、この行をあなたのお気に入りに入れることができます。bashrcに:
    • export GPG_TTY=$(tty)
  • GPG_AGENT_INFO
+0

私はUbuntuを使用することを言及するのを忘れてしまいました。 :sweat_smile:あなたの研究を私の問題に適用できるかどうかを見てみましょう。 –

+1

私の問題に対する解決策は明らかに簡単でした。 [このマニュアル](https://www.gnupg.org/documentation/manuals/gnupg/Invoking-GPG_002dAGENT.html)によると、私はどのTTYを使用しているのかをGPGに指定しなければなりません。 。 これを反映するように回答を変更した場合、私はあなたの答えを受け入れることができます。 –

+0

@ cj-duncanあなたの '.bashrc'に' GPT_TTY'を設定する方法の詳細を書いています。(私はあなたのユーザ名にスペースを "@"つける方法はありません:) –

関連する問題