¿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.


¿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
    

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.