Como faço para que o GPG Agent armazene em cache minha senha?

21

Sou desenvolvedor e costumo assinar meu Git confirma com minha chave GPG. Consegui fazer com que o GPG Agent funcionasse corretamente no OSX, para que ele só me solicitasse uma senha uma vez por dia, mas estou tendo problemas para fazer o mesmo funcionar no Ubuntu 16.04.

Aqui está o que estou fazendo:

  • Eu tenho minhas chaves GPG configuradas / etc.
  • Estou em um diretório Git.
  • Eu adiciono alguns arquivos ao Git.
  • Em seguida, vou enviá-los ( git commit) e recebo uma solicitação de senha do GPG semelhante a esta:

    $ git ci
    
    You need a passphrase to unlock the secret key for
    user: "Randall Degges <[email protected]>"
    4096-bit RSA key, ID 8F700DA2, created 2016-04-05
    
    [master 1740961] blah
     1 file changed, 1 insertion(+)
    

O problema é: toda vez que faço uma confirmação, minha senha do GPG é solicitada novamente.

O que eu gostaria de fazer é configurar o GPG Agent para armazenar em cache minha senha por um dia inteiro, para que ela seja inserida apenas uma vez.

Eu li várias documentações e posts em blogs, e aqui está o que eu tentei até agora ...

Primeiro, modifiquei meu ~/.zshrcarquivo (uso zsh) para definir o seguinte:

# GPG Agent
export GPG_TTY=$(tty)
export GPGKEY=8F700DA2

Agora, pelo que li, isso por si só deve funcionar depois de reiniciar o gpg-agent, mas não o faz.

Então, a próxima coisa que fiz foi definir um ~/.gnupg/gpg-agent.confarquivo conforme explicado na man gpg-agentpágina:

# Set the default cache time to 1 day.
default-cache-ttl       86400
default-cache-ttl-ssh   86400

# Set the max cache time to 30 days.
max-cache-ttl           2592000
max-cache-ttl-ssh       2592000

Isso também não tem efeito.

Eu também tentei vários métodos de blog, etc., mas nada parece funcionar. Alguém pode me dar algumas dicas de coisas que podem estar faltando?

rdegges
fonte

Respostas:

24

Além de configurar os tempos de cache gpg-agent.conf, você também precisa garantir que o GnuPG esteja realmente fazendo a interface gpg-agent. O GnuPG 2 e superior geralmente o faz, mas o ramo GnuPG 1 não. Por padrão, o git está usando o gpgbinário, que (no momento em que escrevemos esta resposta) ainda é o GnuPG 1, enquanto o GnuPG 2 está instalado como gpg2na maioria dos sistemas.

No final, você tem duas possibilidades:

  • configure o git para usogpg2 alterando a configuração do git:

    git config --global gpg.program gpg2
    
  • configuração gpg(GnuPG 1) para usar gpg-agentadicionando use-agentaogpg.conf
Jens Erat
fonte
0

Além da resposta acima, você também pode alterar o padrão gpgno seu sistema para em gpg2vez de gpg1.

Se git config --global gpg.program gpg2funcionar para você, mas você não deseja deixar isso na sua configuração do git (no meu caso, porque eu uso a mesma configuração no macOS), basta trocar o padrão gpg.

Eu segui o guia aqui , que era apenas:

$ sudo mv /usr/bin/gpg /usr/bin/gpg1
$ sudo update-alternatives --verbose --install /usr/bin/gpg gnupg /usr/bin/gpg2 50

Isso torna gpg1o gpgbinário antigo e os links simbólicos /usr/bin/gpg -> /usr/bin/gpg2(com nome gnupg e prioridade 50).

Mudar o padrão gpgpode, em teoria, quebrar alguns pacotes no seu sistema, mas o Debian Stretch (a versão estável atual do Debian) define gpg2como padrão o padrão degpg maneira semelhante, portanto você não deve ter muitos problemas.

gib
fonte