Como uso o gpg-agent com ssh-agent + ssh-add?

13

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

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

Eu posso estar errado, então estou querendo saber como posso configurar gpg-agent de tal forma que nenhum arquivo / diretório seja criado? Se não for possível, outras sugestões para que gpg-agent funcionem como ssh-agent + ssh-add seriam bem-vindas também. Eu não estou procurando soluções de interface gráfica como o Seahorse.

    
por Lekensteyn 23.06.2011 / 12:22

1 resposta

11

Eu decidi dar uma olhada nisso novamente e descobri como isso 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 frase-senha desde que a chave foi adicionada inicialmente.
  • O tempo para manter uma senha desde que foi acessada pela última vez.

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

As entradas de página de manual relevantes 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).

Os códigos de acesso são sempre armazenados em cache (na memória, não no disco! Verificado com um repositório git de $HOME ), portanto, não há necessidade explícita de ssh-add . Por exemplo, assinar dados simulados aciona o cache já:

$ 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

Eu tentei ativar o suporte ao agente SSH especificando enable-ssh-support , mas isso faz com que o agente-gpg peça outra chave para criptografar a chave e, em seguida, armazena sua chave privada em ~/.gnupg/private-keys.d/ . Não vá para mim, eu vou ficar com uma abordagem dual ssh-agent / gpg-agent, então.

Algumas dicas de bônus:

    O
  • equivalente a max-cache-ttl-ssh do agente SSH pode ser especificado ao adicionar a chave, por exemplo: ssh-add -t 600 ~/.ssh/id_rsa
  • Para evitar o armazenamento da senha GPG no agente, desative o agente. Em 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
    
por Lekensteyn 14.01.2013 / 10:14

Tags