Come uso gpg-agent come con ssh-agent + ssh-add?


15

ssh-agentè molto facile da usare, lo avvio e aggiungo le chiavi usando ssh-add keyfile. Dopo aver terminato il processo ssh-agent, tutti i file sono spariti.

Come posso ottenere lo stesso comportamento con gpg-agent? Il programma più vicino che ho trovato è stato gpg-preset-passphrase. Ma guardando la pagina di manuale digpg-agent , sembra che sia stata creata una directory per archiviare le chiavi private.

Potrei sbagliarmi, quindi mi chiedo come posso impostare gpg-agentin modo tale da non creare file / directory? Se non è possibile, anche altri suggerimenti per far gpg-agentfunzionare come ssh-agent+ ssh-addsarebbero i benvenuti. Non sto cercando soluzioni GUI come Seahorse.


hai verificato gpg-connect-agent?
Smithamax,

@Smithamax no, ma sembra usare la stessa funzionalità di gpg-preset-passphrase. Ho corso gpg-connect-agent, ottenuto una shell ed eseguito setkey IDOFMYPRIVATEKEYHEREseguito da preset_passphrasee id ha dato come risultato "ERR 67108924 non supportato <GPG-agent> - no --allow-preset-passphrase"
Lekensteyn

Risposte:


13

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-sshpuò 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-agentviene 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
    

la mia macchina continua a chiedere la passphrase più e più volte
don luminoso

@donbright Sei sicuro che ce n'è solo uno gpg-agentattivo? (Controllare l'elenco dei processi, ad esempio con ps u -C gpg-agent). Il timeout della cache è impostato correttamente? Se lo si utilizza per la firma (al contrario dell'autenticazione (SSH)), l' ignore-cache-for-signingopzione non è impostata?
Lekensteyn,

Grazie. il mio problema si è rivelato che stavo usando gpg 1.4 invece di gpg 2, su Ubuntu può confondere quali pacchetti dovresti installare.
don luminoso
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.