2016-04-08 45 views
11

GitHub recently announced verified commits,所以我藉此機會實施了GPG並開始使用密鑰。當我要開始犯,我得到如下:爲什麼我必須殺死gpg-agent來簽署我的提交?

$ 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 

我上網,並尋找一個解決方案,其中一個站點(用於郵件提供商)建議killall gpg-agent,和它的工作。現在,我可以通過輸入我的密碼來簽署提交。

是否需要gpg-agent?當我安裝GPG時,似乎會出現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第一註釋掉CONFIGS,然後我跑這個命令來重新啓動GPG-劑--verbose

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

然後我跑的測試命令,看見我們兩個上面列出的錯誤,以及一個新問題:

# 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),我必須向GPG指定我正在使用的TTY,一旦完成,一切運作良好。 如果您修改您的答案以反映這一點,我可以接受您的答案。 –

+0

@ cj-duncan我在你的'.bashrc'中設置了'GPT_TTY'的詳細信息(我不知道如何用你的用戶名中的空格「@」) –

相關問題