¿Cómo uso gpg-agent como con ssh-agent + ssh-add?

15

ssh-agentes muy fácil de usar, lo inicio y agrego claves usando ssh-add keyfile. Después de matar el proceso ssh-agent, todos los archivos se han ido.

¿Cómo puedo obtener el mismo comportamiento con gpg-agent? El programa más cercano que encontré fue gpg-preset-passphrase. Pero mirando la página del manual degpg-agent , parece que se crea un directorio para almacenar claves privadas.

Podría estar equivocado, así que me pregunto cómo puedo configurar gpg-agentde tal manera que no se creen archivos / directorios. Si no es posible, otras sugerencias para hacer un gpg-agenttrabajo como ssh-agent+ también ssh-addserían bienvenidas. No estoy buscando soluciones GUI como Seahorse.

Lekensteyn
fuente
¿te has ido gpg-connect-agent?
Smithamax
@Smithamax no, pero parece usar la misma funcionalidad de gpg-preset-passphrase. Corrí gpg-connect-agent, obtuve un intérprete de comandos y ejecuté setkey IDOFMYPRIVATEKEYHEREseguido de una preset_passphraseidentificación que resultó en "ERR 67108924 <GPG-agent> no compatible - no --allow-preset-passphrase"
Lekensteyn

Respuestas:

13

Decidí echarle un vistazo a esto nuevamente y descubrí cómo funciona. GPG utiliza la terminología "caché" para almacenar contraseñas. Se pueden imponer dos restricciones al tiempo máximo de almacenamiento:

  • El tiempo para mantener una frase de contraseña desde que se agregó la clave inicialmente.
  • El tiempo para mantener una frase de contraseña desde que se accedió por última vez.

Además, existen dos variaciones para ambas restricciones, una para las claves GPG y otra para las claves SSH (si el soporte estaba habilitado).

Las entradas relevantes de la página del 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).

Las frases de contraseña siempre se almacenan en caché (en la memoria, ¡no en el disco! Verificadas con un repositorio git de $HOME), por lo que no hay una necesidad explícita de hacerlo ssh-add. Por ejemplo, firmar datos ficticios ya activa el caché:

$ echo | gpg -s >/dev/null
(passphrase requested
$ echo | gpg -s >/dev/null
(signing proceeds without asking for passphrase)

Para realizar cambios permanentes en la configuración de caché de gpg-agent, edite ~ / .gnupg / gpg-agent.conf` y agregue 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

Intenté habilitar el soporte del agente SSH especificando enable-ssh-support, pero esto hace que el agente gpg le pida otra clave para cifrar la clave, y luego almacena su clave privada ~/.gnupg/private-keys.d/. No va por mí, entonces me apegaré a un enfoque dual ssh-agent / gpg-agent.

Algunos consejos extra:

  • El equivalente del agente SSH max-cache-ttl-sshse puede especificar al agregar la clave, por ejemplo:ssh-add -t 600 ~/.ssh/id_rsa
  • Para evitar almacenar la frase de contraseña GPG en el agente, desactive el agente. En las versiones más recientes de GPG, la opción --no-use-agentse ignora, pero puede evitar que se use el agente borrando la variable de entorno relacionada. Algunas formas de hacerlo:

    echo | GPG_AGENT_INFO= gpg -s         # temporary
    export GPG_AGENT_INFO=; echo | gpg -s # until the current shell is closed
    
Lekensteyn
fuente
mi máquina sigue pidiendo la frase de contraseña una y otra vez
don brillante
@donbright ¿Estás seguro de que solo hay uno gpg-agentactivo? (Verifique la lista de procesos, por ejemplo con ps u -C gpg-agent). ¿El tiempo de espera de caché está configurado correctamente? Si lo usa para firmar (en oposición a la autenticación (SSH)), ¿está ignore-cache-for-signingdeshabilitada la opción?
Lekensteyn
Gracias. mi problema resultó ser que estaba usando gpg 1.4 en lugar de gpg 2, en ubuntu puede ser confuso qué paquetes se supone que debes instalar.
Don brillante