Como uso o gpg-agent como no ssh-agent + ssh-add?

15

ssh-agenté muito fácil de usar, eu inicio e adiciono chaves usando ssh-add keyfile. Depois de encerrar o processo ssh-agent, todos os arquivos desaparecem.

Como posso obter o mesmo comportamento gpg-agent? O programa mais próximo que encontrei foi gpg-preset-passphrase. Mas, olhando a página de manualgpg-agent , parece que um diretório foi criado para armazenar chaves privadas.

Eu posso estar errado, então estou me perguntando como posso configurar gpg-agentde tal maneira que nenhum arquivo / diretório seja criado? Se não for possível, outras sugestões para fazer o gpg-agenttrabalho como ssh-agent+ ssh-addtambém serão bem-vindas. Não estou procurando soluções de GUI como o Seahorse.

Lekensteyn
fonte
você fez check-out gpg-connect-agent?
Smithamax
@Smithamax não, mas parece usar a mesma funcionalidade de gpg-preset-passphrase. Eu corri gpg-connect-agent, peguei um shell e executei setkey IDOFMYPRIVATEKEYHEREseguido por preset_passphrasee o id resultou em "ERR 67108924 <GPG-agent> não suportado - sem - senha permitida predefinida"
Lekensteyn

Respostas:

13

Decidi dar uma olhada nisso novamente e descobri como funciona. O GPG usa a terminologia "cache" para armazenar senhas. Duas restrições podem ser impostas ao tempo máximo de armazenamento:

  • O tempo para manter uma senha, desde que a chave foi adicionada inicialmente.
  • A hora de manter uma senha desde que foi acessada pela última vez.

Além disso, existem duas variações para as duas restrições, uma para chaves GPG e outra para chaves SSH (se o suporte estiver ativado).

As entradas relevantes da página de manual de gpg-agent(1):

   --default-cache-ttl n
          Set  the  time a cache entry is valid to n seconds.  The default
          is 600 seconds.

   --default-cache-ttl-ssh n
          Set the time a cache entry used for SSH keys is valid to n  sec‐
          onds.  The default is 1800 seconds.

   --max-cache-ttl n
          Set the maximum time a cache entry is valid to n seconds.  After
          this time a cache entry will be expired  even  if  it  has  been
          accessed recently.  The default is 2 hours (7200 seconds).

   --max-cache-ttl-ssh n
          Set the maximum time a cache entry used for SSH keys is valid to
          n seconds.  After this time a cache entry will be  expired  even
          if  it has been accessed recently.  The default is 2 hours (7200
          seconds).

As senhas são sempre armazenadas em cache (na memória, não no disco! Verificadas com um repositório git de $HOME), portanto, não há necessidade explícita ssh-add. Por exemplo, a assinatura de dados fictícios já aciona o cache:

$ echo | gpg -s >/dev/null
(passphrase requested
$ echo | gpg -s >/dev/null
(signing proceeds without asking for passphrase)

Para fazer alterações permanentes nas configurações de cache do gpg-agent, edite ~ / .gnupg / gpg-agent.conf` e adicione algo como:

default-cache-ttl  60     # Expire GPG keys when unused for 1 minute
max-cache-ttl     600     # Expire GPG keys after 10 minutes since addition

Tentei ativar o suporte ao agente SSH especificando enable-ssh-support, mas isso faz com que o gpg-agent solicite outra chave para criptografar a chave e, em seguida, armazene sua chave privada ~/.gnupg/private-keys.d/. Não vá para mim, vou seguir uma abordagem dupla ssh-agent / gpg-agent.

Algumas dicas de bônus:

  • O equivalente do agente SSH max-cache-ttl-sshpode ser especificado ao adicionar a chave, por exemplo:ssh-add -t 600 ~/.ssh/id_rsa
  • Para impedir o armazenamento da senha do GPG no agente, desative o agente. Nas versões mais recentes do GPG, a opção --no-use-agenté ignorada, mas você pode impedir que o agente seja usado limpando a variável de ambiente relacionada. Algumas maneiras de fazer isso:

    echo | GPG_AGENT_INFO= gpg -s         # temporary
    export GPG_AGENT_INFO=; echo | gpg -s # until the current shell is closed
    
Lekensteyn
fonte
minha máquina continua pedindo a senha repetidamente
don bright
@donbright Tem certeza de que existe apenas um gpg-agentativo? (Verifique a lista de processos, por exemplo, com ps u -C gpg-agent). O tempo limite do cache está definido adequadamente? Se você usá-lo para assinar (em oposição à autenticação (SSH)), a ignore-cache-for-signingopção está desmarcada?
Lekensteyn
obrigado. meu problema acabou sendo que eu estava usando o gpg 1.4 em vez do gpg 2, no ubuntu pode ser confuso quais pacotes você deve instalar.
don brilhante