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-ssh
pode 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
gpg-connect-agent
?