
Estoy intentando programar un descifrado gpg y, como tal, necesito proporcionar la contraseña en la línea de comando. Según la página de manual, hay tres formas de hacer esto: leer desde un archivo usando --passphrase-file
, leer desde stdin (u otro descriptor de archivo) usando --passphrase-fd 0
o incluir en la línea de comando usando solo --passphrase
. Todo lo anterior también requiere --batch
ser configurado, lo cual hice.
Mi intento de línea de comando más reciente es:
echo "<password>" | gpg2 --no-tty --batch --passphrase-fd 0 -d -o /<path_to_destination>/$FILE_NAME $FILE
que todavía aparece un cuadro de diálogo solicitando la contraseña. ¿Que me estoy perdiendo aqui? Como referencia, si hay alguna diferencia, mi contraseña incluye algunos caracteres especiales como &
, pero no parece quejarse de eso. Además, la versión de gpg es 2.1.9:
# gpg2 --version
gpg (GnuPG) 2.1.9
libgcrypt 1.7.1
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Home: ~/.gnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2
EDITAR: A diferencia¿Cómo forzar a GPG a utilizar pinentry en modo consola para solicitar contraseñas?, que simplemente intenta obtener una entrada de contraseña basada en texto para usar en una sesión SSH, estoy tratando de obtener un método completamente no interactivo para usar GPG para usar en secuencias de comandos.
Respuesta1
Encontré la solución aquí:https://wiki.archlinux.org/index.php/GnuPG#Unattended_passphrase
En pocas palabras, primero necesitaba habilitar el modo "loopback" de pinentry en gpg-agent agregando la siguiente línea al ~/.gnupg/gpg-agent.conf
archivo:
allow-loopback-pinentry
Luego agregando el --pinentry-mode loopback
argumento a mi gpg2
llamada.