Ho deciso di dare un'altra occhiata a questo e ho scoperto come funziona. GPG utilizza la terminologia "cache" per la memorizzazione delle password. È possibile imporre due vincoli sul tempo massimo di archiviazione:
- Il tempo per conservare una passphrase dall'aggiunta iniziale della chiave.
- Il tempo per conservare una passphrase dall'ultimo accesso.
Inoltre, esistono due varianti per entrambi i vincoli, uno per le chiavi GPG e uno per le chiavi SSH (se il supporto è stato abilitato).
Le voci pertinenti della pagina del manuale da 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).
Le passphrase sono sempre memorizzate nella cache (in memoria, non su disco! Verificato con un repository git di $HOME
), quindi non è necessario esplicito ssh-add
. Ad esempio, la firma di dati fittizi attiva già la cache:
$ echo | gpg -s >/dev/null
(passphrase requested
$ echo | gpg -s >/dev/null
(signing proceeds without asking for passphrase)
Per apportare modifiche permanenti alle impostazioni della cache di gpg-agent, modifica ~ / .gnupg / gpg-agent.conf` e aggiungi qualcosa come:
default-cache-ttl 60 # Expire GPG keys when unused for 1 minute
max-cache-ttl 600 # Expire GPG keys after 10 minutes since addition
Ho cercato di abilitare il supporto dell'agente SSH specificando enable-ssh-support
, ma questo fa sì che l'agente gpg ti chieda un'altra chiave per crittografare la chiave, quindi memorizza la tua chiave privata ~/.gnupg/private-keys.d/
. Per me, seguirò un duplice approccio ssh-agent / gpg-agent.
Alcuni consigli bonus:
- L'equivalente dell'agente SSH
max-cache-ttl-ssh
può essere specificato quando si aggiunge la chiave, ad esempio:ssh-add -t 600 ~/.ssh/id_rsa
Per impedire la memorizzazione della passphrase GPG nell'agente, disabilitare l'agente. Nelle versioni GPG più recenti l'opzione --no-use-agent
viene ignorata, ma è possibile impedire che l'agente venga utilizzato cancellando la relativa variabile d'ambiente. Alcuni modi per farlo:
echo | GPG_AGENT_INFO= gpg -s # temporary
export GPG_AGENT_INFO=; echo | gpg -s # until the current shell is closed
gpg-connect-agent
?