2016-04-08 3 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-agent и быть в состоянии подписать мои поручения?

ответ

16

Я только что понял, как использовать gpg-agent на моем Mac сегодня. Я был заблокирован после такой же ошибки, как вы:

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, то я запустил эту команду, чтобы перезапустить 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 
... 

в конце концов я понял (после прочтения this article и this GPG page), который было GPG_TTYне установленных шагами я следующие для запуска gpg-agent. Поэтому, как только я установил, что переменная все «работает»:

% 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 Я подробно рассказал о настройке 'GPT_TTY' в вашем' .bashrc' (я понятия не имею, как «@» вы с пространством в вашем имени пользователя :)) –

Смежные вопросы