Estoy llamando a gpg2
un script CLI para el cifrado simétrico de un archivo local. Parece que se gpg-agent
solicita una frase de contraseña a través de alguna CLI, interfaz de usuario basada en texto. Mientras esté cerca para ingresar la frase de contraseña, todo funcionará bien. Sin embargo, si no lo soy, eventualmente falla con este mensaje:
gpg-agent[15338]: command get_passphrase failed: Operation cancelled
gpg: cancelled by user
gpg: error creating passphrase: Operation cancelled
gpg: symmetric encryption of `XXXX.tar' failed: Operation cancelled
¿Hay alguna manera de desactivar este tiempo de espera por completo?
Me gustaría que el mensaje de contraseña permanezca en la pantalla indefinidamente hasta que ingrese algo.
Respuesta1
La solución se ha encontrado aquí:https://dev.gnupg.org/T3240
El retraso se debe a que pinentry consulta el llavero de GNOME. Añadir no-allow-external-cache
a tugpg-agent.conf, o eliminar gnome-keyring
y eliminar gpg-agent que se está ejecutando actualmente:gpgconf --kill gpg-agent
Respuesta2
En gpg-agent.conf (veragente-gpg(1)), pruebe las siguientes opciones:
pinentry-timeout 0
pinentry-program /usr/bin/pinentry-curses --timeout 0
(Aunque puede que le resulte pinentry-tty
más agradable utilizarlo).
Respuesta3
P: "¿Cómo evitar que gpg-agent se agote durante la recopilación de la frase de contraseña?
R: Un caso específico es el uso de gpg
en una ssh
sesión. La siguiente configuración permiteagente-gpgtambién dentro de una ssh
sesión. En particular
- sin agarrepermite cortar y pegar
- no-permitir-caché-externodesactiva cualquier llavero
- maldiciones-pinentrysolicita la contraseña en la terminal en lugar de la predeterminadaentradapreguntando en la ventana del escritorio remoto (en el caso de ssh).
- El tiempo para vivirttl(5,6) se establece en 24 horas. De esta manera, no es necesario volver a ingresar la contraseña cuando, por ejemplo, se ejecuta diariamente un cron, que invoca un script con gpg-agent.
shell> cat ~/.gnupg/gpg-agent.conf
no-grab
no-allow-external-cache
pinentry-program /usr/bin/pinentry-curses
default-cache-ttl 86400
max-cache-ttl 86400
Respuesta4
Lo que funcionó para mí (gpg 2.1.11) fue simplemente establecer la pinentry-timeout
opción en un valor grande (como 24 horas), agregando lo siguiente a mi ~/.gnupg/gpg-agent.conf
archivo:
# time until pinentry closes in seconds
pinentry-timeout 86400