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