Espero que el siguiente comando extraiga el archivo gpg sin pedir la contraseña:

 gpg --passphrase 1234 file.gpg 

Pero pide la contraseña. ¿Por qué?

Esto también tiene el mismo comportamiento:

 gpg --passphrase-file passfile.txt file.gpg 

Yo uso Ubuntu con gnome 3, y recuerdo que estaba funcionando en Fedora

Comentarios

  • ¿Está seguro de que gpg ejecuta el comando correcto, ni un alias ni un contenedor? Pruebe /usr/bin/gpg --passphrase 1234 file.gpg, type gpg, gpg --version y set | grep '^.\{0,9\}PG'
  • Solo para que conste, si usa la versión anterior de GPG, debería funcionar (en Ubuntu y similares, ' es el paquete gnupg1. Sin embargo, desaconsejan su uso a menos que sea necesario.
  • También tenga en cuenta que en GPG 2.x gpg --list-packets --batch myFile.gpg solicita una frase de contraseña, mientras que no ' t en GPG 1.x. Ese era mi problema (en un programa que ' estoy escribiendo), mientras que pensaba que tenía tu problema (el –list-packets se ejecutó primero, antes de intentar descifrar, y no ' t aviso). Así que hice una nueva forma de determinar si los archivos estaban cifrados.
  • Si tiene gpg --version 2.x (como en Ubuntu 18.04), salte a Xen2050 ' s respuesta: unix.stackexchange.com/a/415064/237055

Respuesta

Estoy exactamente en tu mismo barco (funcionó en Fedora pero no en Ubuntu). Aquí hay un trabajo aparente que descubrí:

echo your_password | gpg --batch --yes --passphrase-fd 0 your_file.gpg 

Explicación: Pasar 0 provoca --passphrase-fd para leer desde STDIN en lugar de desde un archivo. Por lo tanto, canalizar la frase de contraseña hará que --passphrase-fd acepte la cadena de contraseña especificada.

Comentarios

  • agregando --batch --yes a lo anterior funcionó para mí.
  • Pero luego tengo un problema, si quiero encriptar datos que se canalizan en gpg, por ejemplo echo "encrypt me" | gpg --passphrarse "mypw" -c -o test.gpg. ¿Cómo soluciono esto?
  • Bueno, con la versión de Ubuntu de gpg, echo "encrypt me" | gpg --passphrase "mypassphrase" --batch --quiet --yes --no-use-agent -c -o encrypted.gpg parece funcionar.
  • I ' obtengo Inappropriate ioctl for device con y sin --batch aquí (en gpg (GnuPG) 2.1.18).
  • @RyanGriggs No lo creo. echo "hello" | cat y echo "hello"| cat ambos producen la misma cadena.

Respuesta

Actualizado el 4 de diciembre de 2017. (Añadiendo –batch para evitar el mensaje de contraseña)

Puede que tenga que añadir la opción --batch:

Y. Si usa par de claves de destinatario , es posible que deba agregar --pinentry-mode loopback también.

De la versión 2 de GPG, la opción --batch es necesaria para asegurar que no haya ningún mensaje … Ok, mira eso:

$ gpg --version gpg (GnuPG) 2.1.18 libgcrypt 1.7.6-beta Copyright (C) 2017 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://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: /home/user /.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 

Intentando:

$ newdir=$(mktemp -d) $ cd $newdir $ seq 1 10 | gpg -c --batch --passphrase 1234 -o file.gpg - $ ls -ltr total 4 -rw-r--r-- 1 user user 91 Dec 4 15:42 file.gpg $ hd file.gpg 00000000 8c 0d 04 07 03 02 ea fa d0 d3 2b 9a ea 06 df d2 |..........+.....| 00000010 4a 01 ed 50 74 ff 27 45 0e 6c 94 74 db e9 8a a5 |J..Pt."E.l.t....| 00000020 03 9f 67 a0 73 97 e9 15 6b 56 a0 f0 88 71 85 a8 |..g.s...kV...q..| 00000030 dc 41 71 9f fa 3b f9 9d af ac 80 eb f4 f7 28 19 |.Aq..;........(.| 00000040 9f be 75 47 e6 d8 00 3e f6 60 f1 00 5e 63 57 ef |..uG...>.`..^cW.| 00000050 14 c3 4b 20 ff 94 03 03 c1 fc 98 |..K .......| 0000005b 

¡suena bien! Bueno, ahora:

$ gpg -d --batch --passphrase 1234 file.gpg gpg: AES encrypted data gpg: encrypted with 1 passphrase 1 2 3 4 5 6 7 8 9 10 

Si bien no se proporciona ningún parámetro -d (la misma sintaxis que la pregunta de SO), Los datos descifrados de file.gpg se extraerán a un nuevo file.

$ gpg --batch --passphrase 1234 file.gpg gpg: WARNING: no command supplied. Trying to guess what you mean ... gpg: AES encrypted data gpg: encrypted with 1 passphrase $ ls -ltr total 8 -rw-r--r-- 1 user user 91 Dec 4 15:42 file.gpg -rw-r--r-- 1 user user 21 Dec 4 15:44 file $ cat file 1 2 3 4 5 6 7 8 9 10 

¡Esto funciona bien!

$ cd - $ rm -fR $newdir $ unset newdir 

Para archivo de claves del destinatario :

Primera creación de tempo limpio

newdir=$(mktemp -d) cd $newdir export GNUPGHOME=$newdir echo YourPassword >password.txt gpgconf --kill gpg-agent # Required, if agent_genkey fail... gpg --generate-key --batch <<eoGpgConf %echo Started! Key-Type: default Key-Length: default Subkey-Type: default Name-Real: Full Name There Name-Comment: Something funny Name-Email: [email protected] Expire-Date: 0 Passphrase: $(<password.txt) %commit %echo Done. eoGpgConf gpg: keybox "/tmp/tmp.xU5Ldyr4iB/pubring.kbx" created gpg: Started! gpg: agent_genkey failed: No such file or directory gpg: key generation failed: No such file or directory gpg: Done. 

Mmm.

gpgconf --kill gpg-agent gpg --generate-key --batch <<eoGpgConf %echo Started! ... eoGpgConf gpg: Started! gpg: key 43E6B96CAFABDEDF marked as ultimately trusted gpg: directory "/tmp/tmp.xU5Ldyr4iB/openpgp-revocs.d" created gpg: revocation certificate stored as "/tmp/tmp.xU5Ldyr4iB/openpgp-revocs.d/DF223E1612CF917DC3BD42AA43E6B96CAFABDEDF.rev" gpg: Done. 

Entonces ahora

gpg -k /tmp/tmp.xU5Ldyr4iB/pubring.kbx ------------------------------- pub rsa3072 2020-06-19 [SC] DF223E1612CF917DC3BD42AA43E6B96CAFABDEDF uid [ultimate] Full Name There (Something funny) <[email protected]> sub rsa3072 2020-06-19 [E] 

Entonces el último 8char de la huella digital de pub podría usarse como alias de clave.

gpg -k [email protected]| sed -e "/^pub/{N;s/.*\(.\{16\}\)/\1/;p;s/^.\{8\}//;q};d" 43E6B96CAFABDEDF AFABDEDF 

¡Bien, ahora!

seq -f %\"8g 990 5 1015 | gpg --batch --armor --recipient AFABDEDF --encrypt --output file.gpg 

o

seq -f %\"8g 990 5 1015 | gpg --batch -aer 43E6B96CAFABDEDF -o file.gpg 

Dará:

cat file.gpg -----BEGIN PGP MESSAGE----- hQEOA5BNpEVKPGsfEAP/XutJp7ME3I1MqG0vZyIS8w+npPQMPicIpQUwM4OVO1rX 2lhrymp0zGqxAH7s9Dh9YJNRA/9zYCO4/vghtnnl/zg10vILs9btgLXY+aupgoQ9 nifnVC8JJ1DC+hZZrIHyzS73BsjufWhpbwURYc7EgIMGKu2TRiy5I8+0aZ4zAtID /ApL0sTBQ9hqmIatzaYbX9ajmDf1vvtE2/s3MUFA/hIqew2MVMhlb4RjyT7ix03P LmCH2Mfy88VGr59eSUoZq+CPMDSZpXxbE2LfyPHYsObraO+a6FdVHhj2xcw/tnDO TcNHTKnTRJSb9sfLAtJmE9eaxebkl27T+UvqyJUG4dgu0lABadboNaEidlrCYLNi icR19UX0G7E50+i3iKvw0u81YtciYyOnpHvgazb5QbqJNN5P8izC4J3FqW7HaTDI xnf+8IaX2Vqrq5+k4qLR7h5Vcw== =1fb5 -----END PGP MESSAGE----- 

Entonces

gpg --decrypt --pinentry-mode loopback --passphrase-file password.txt --batch file.gpg 

o

gpg -d --pinentry-mode loopback --passphrase-file password.txt --batch file.gpg 

representará:

gpg: encrypted with 3072-bit RSA key, ID 58020687E0746339, created 2020-06-19 "Full Name There (Something funny) <[email protected]>" 990 995 1"000 1"005 1"010 1"015 

Comentarios

  • No recibes la advertencia " gpg: gpg-agent no está disponible en esta sesión " entonces probablemente tengas la contraseña almacenada en el agente, ¿quizás?
  • @AsfandYarQazi No, la contraseña se ingresa en la línea de comando.
  • Esta respuesta funcionó para mí. Ubuntu con gpg 1.4.16. El parámetro --passphrase funciona para operaciones por lotes y no ' t solicita una contraseña.
  • Esto puede parece que funciona porque el molesto agente gpg está almacenando en caché la frase de contraseña. Intente reiniciar el sistema por completo y comenzar de nuevo, o ingrese la contraseña incorrecta 5678 (contraseña incorrecta).
  • Vea la respuesta inferior. La clave es --pinentry-mode loopback. ¡Funciona!

Respuesta

Para gpg versión 2.x no necesita usar --batch, solo

--pinentry-mode loopback 

funciona con --passphrase & --passphrase-file, y le permitirá ingresar nueva información, en caso de conflictos de nombre de archivo, por ejemplo:

gpg --pinentry-mode loopback --passphrase-file=file encrypted.gpg ... File "encrypted" exists. Overwrite? (y/N)n Enter new filename: f2 

a diferencia de --batch que fallará rápidamente, diciendo ...failed: File exists

(probado en Debian Stable / Stretch «s gpg 2.1.18. Este comportamiento de ignorar opciones importantes --passphrase realmente debería ser un error, si no lo es ya)

Comentarios

  • Esto también funciona muy bien en Ubuntu 18.04 Bionic con gpg (GnuPG) 2.2.4
  • Esto funciona en MacOS después de la instalación gpg con homebrew
  • Esto me funciona cat your-passphrase-file.txt | gpg --pinentry-mode loopback --passphrase-fd 0 --sign your-file-to-sign.txt
  • Gracias, también funciona para el descifrado

Responder

Parece que estás usando gpg2. También debe incluir la opción --batch. (Si planea agregar esto a un script, también querrá agregar --no-tty y probablemente --yes.)

Comentarios

  • Es ' s 1.4. usar –batch no tiene ningún efecto.
  • Lo siento, entonces @Nima. No ' no sé qué decirte. Con GnuPG v1.4 no debería ' no necesitar hacer nada más para pasar la frase de contraseña con cualquiera de esas opciones.
  • Buena nota, @rsaw, ayudó Prevenir mensajes de contraseña (y una opción echo / STDIN un poco menos elegante).
  • –batch ayudó incluso en Windows. woo hoo.

Respuesta

para mí, agregar «–no-use-agent» resolvió esto para «gpg (GnuPG) 1.4.16»:

date > foo echo pass > passphrase # w/o --no-use-agent > rm -f foo.gpg; gpg --cipher-algo aes256 --output foo.gpg --passphrase-file ./passphrase --batch --yes --symmetric foo gpg: gpg-agent is not available in this session gpg: can"t query passphrase in batch mode gpg: error creating passphrase: invalid passphrase gpg: symmetric encryption of `foo" failed: invalid passphrase > rm -f foo.gpg; gpg --cipher-algo aes256 --output foo.gpg --passphrase-file ./passphrase --batch --yes --no-use-agent --symmetric foo > ls -al total 20 drwxr-xr-x 2 root root 4096 Aug 22 13:59 . drwx------ 18 root root 4096 Aug 22 13:58 .. -rw-r--r-- 1 root root 30 Aug 22 13:58 foo -rw-r--r-- 1 root root 103 Aug 22 13:59 foo.gpg -rw-r--r-- 1 root root 5 Aug 22 13:58 passphrase 

Responder

Si usando gpg (GnuPG) 2.2.7 Según la página del manual,

–passphrase-fd n

Lea la contraseña de descriptor de archivo n. Solo se leerá la primera línea del descriptor de archivo n. Si usa 0 para n, la frase de contraseña se leerá desde STDIN. Esto solo se puede usar si solo se proporciona una contraseña.

–passphrase-file file

Lea la contraseña del archivo. Solo se leerá la primera línea del archivo. Esto solo se puede usar si solo se proporciona una frase de contraseña. Obviamente, una frase de contraseña almacenada en un archivo es de seguridad cuestionable si otros usuarios pueden leer este archivo. No use esta opción si puede evitarla.

–passphrase string

Use string como contraseña. Esto solo se puede usar si solo se proporciona una contraseña. Obviamente, esto es de seguridad muy cuestionable en un sistema multiusuario. No use esta opción si puede evitarla.

add --pinentry-mode loopback para que funcione

Tenga en cuenta que, desde la versión 2.0, esta contraseña solo se utiliza si también se ha proporcionado la opción –batch . Desde la versión 2.1, el –pinentry-mode también debe configurarse en loopback.

Por ejemplo:

gpg --batch --yes --passphrase="pw" --pinentry-mode loopback -o out -d in 

Comentarios

  • Son ambos --batch y --pinentry-mode loopback opciones necesarias para que cualquier opción –passphrase … funcione? En v.2.1.18, la página de información dice lo mismo (pero no la página de manual) sobre el lote & necesario, pero aún funciona solo con –pinentry … Si ambos realmente son necesarios para la v.2.2.7, entonces las cosas se están poniendo ridículas, los desarrolladores están introduciendo errores graves a propósito

Responder

read -sp "Enter passphrase: " pass echo "${pass}" | gpg --batch --no-tty --yes --passphrase-fd 0 --symmetric -o /path/to/saved/file.jpg.gpg /path/to/file.jpg echo "${pass}" | gpg --batch --no-tty --yes --passphrase-fd 0 --decrypt -o /path/to/decrypted/file.jpg /path/to/encrypted/file.jpg.gpg 

Respuesta

Funcionó como magia para mí:

echo "YOUR_PASS_PHRASE" | gpg --batch --yes --passphrase-fd 0 /home/somewhere/your_file.pgp 

Comentarios

  • error: gpg: no valid OpenPGP data found. gpg: processing message failed: eof. ¿Alguna idea?

Responder

¿Ha intentado hacer:

gpg --batch --passphrase-fd 0 --decrypt-files *.gpg gpg --passphrase-fd 0 1234 file.gpg 

Fuente: Aquí

Respuesta

Como se menciona en man gpg, se puede usar la siguiente opción

–pinentry-mode mode Establece el modo de entrada en modo. Los valores permitidos para el modo son:

 default Use the default of the agent, which is ask. ask Force the use of the Pinentry. cancel Emulate use of Pinentry"s cancel button. error Return a Pinentry error (``No Pinentry""). loopback Redirect Pinentry queries to the caller. Note that in contrast to Pinentry the user is not prompted again if he enters a bad password. 

Por lo tanto, el comportamiento predeterminado de gpg es pedirle al usuario una frase de contraseña, si cambia este modo de agente de usuario a «–pinentry-mode loopback «Funciona perfectamente bien. comando completo

gpg --pinentry-mode loopback --passphrase <passphrase> -d <file to decrypt> 

Responder

Creo que es un método bastante seguro para pasar la contraseña para la línea de comando es esta:

gpg --passphrase-file <(echo password) --batch --output outfile -c file 

Lo que esto hará es generar el comando «echo» y pasar un descriptor de archivo como un nombre de ruta a gpg (por ejemplo, / dev / fd / 63). gpg luego leerá la clave desde allí. Mientras tanto, el comando echo debería ejecutarse en paralelo y debería finalizar instantáneamente, dejando la clave en el búfer del fd.

Los beneficios son:

  • El comando gpg no tendrá la contraseña en su línea de comando
  • El eco será de corta duración. De hecho, debería ser casi instantáneo
  • La contraseña nunca residirá en el disco, no habrá un archivo para ser eliminado y si se interrumpe el comando no habrá sobras

Responder

No me creerás cuando te digo que en ubuntu gpg intenta preguntarte tu contraseña si $ DISPLAY está configurado y lo toma de la línea de comandos –password si lo desarma. Esto funciona como se esperaba:

DISPLAY= gpg --symmetric --passphrase pass --batch 

Solo otro ejemplo de ingeniería excesiva, supongo.

Respuesta

Aquí «un enlace a un stackoverflow respuesta que tal vez sea de mayor ayuda; tengo un proyecto que realiza descifrado / cifrado masivo, y debido a que GnuPG es muy estricto con las frases de contraseña, aprendí por las malas que --passphrase solo funciona en raras ocasiones. En su lugar, considere la opción --passphrase-fd para ser más confiable.

Este script hace adecuado uso de la opción --passphrase -fd, y se ha probado públicamente a través de Travis-CI , donde puede encontrar registros en acción.

Ahora no voy a publicar enlaces a una respuesta sin proporcionar un código de ejemplo aquí, así que aquí tienes un script «independiente» actualizado con el que puedes jugar:

#!/usr/bin/env bash # Set some variables for easy modding Var_fd="9" Var_pass="/path/to/passphrase.file" Var_gpg_opts="--passphrase-fd ${Var_fd} --decrypt" Var_output_location="out.txt" Arr_string=( "$@" ) # Open file descriptor and shove the passphrase file into it if [ -f "${Var_pass}" ]; then exec ${Var_fd}<"${Var_pass}" else exec ${Var_fd}<(echo "${Var_pass}") fi # Pipe input array though gpg and append to output file cat <<<"${Arr_string[*]}" | $(which gpg) ${Var_gpg_opts} >> ${Var_output_location} # Do not forget to close the file descriptor exec ${Var_fd}>&- 

Si bien lo anterior no es tan elegante como el li nked protect en GitHub debería ser incluso más funcional que la respuesta vinculada al principio de esta publicación.

Happy hacking.

Responder

Un método simple que encontré trabajando en una máquina Linux es: 1) importar clave a gpg: => shell> gpg —import private_key.key

2) descifrar dando el nombre del archivo de salida: => shell> gpg —output -d

2.1) Dar el comando anterior le pedirá que ingrese una paráfrasis. Ingrese la paráfrasis y descifrará el archivo gpg.

Respuesta

gpg2 -se --passphrase yourpassword --batch --yes -r [email protected] filename 

Comentarios

  • Sería bueno si pudiera explicar por qué esto debería solucionar el problema
  • Si bien este fragmento de código puede resolver la pregunta, incluida una explicación realmente ayuda a mejorar la calidad de tu publicación. Recuerde que está respondiendo la pregunta para los lectores en el futuro, ¡no solo la persona que la pregunta ahora! edite su respuesta para agregar una explicación y dé una indicación de las limitaciones y suposiciones que se aplican.

Respuesta

Poner al final de ~/.gnupg/gpg.conf:

use-agent pinentry-mode loopback 

Ponga al final del archivo (quizás nuevo) ~/.gnupg/gpg-agent.conf:

allow-loopback-pinentry 

Y luego ejecute este comando :

echo RELOADAGENT | gpg-connect-agent 

Ahora puede ejecutar esto sin pedir la contraseña:

echo "$1" | gpg2 --trust-model always --clearsign --batch --no-tty --quiet --no-verbose --yes -u $2 --digest-algo SHA512 --s2k-digest-algo SHA512 --passphrase "$3" 

Donde $ 1 es el texto que se va a cifrar, $ 2 es el ID de usuario y $ 3 la contraseña.

Nota: No recuerdo por qué funciona, pero funciona. Si conoce los detalles, edita e inserta aquí.

Respuesta

para Ubuntu 18.04 esto funcionó para mí-

cifrar:

pass="123" gpg -c --batch --passphrase "$pass" some-file.tgz 

descifrar:

gpg some-file.tgz.gpg 

Responder

Incluso yo estaba enfrentando el mismo problema. Pero ninguno Si los comandos mencionados aquí no funcionaron y también verifiqué diferentes respuestas con diferentes comandos, pero nada funcionó.

Estaba en Ubuntu 20.04.1 LTS

Después de muchos golpes de cabeza y experimentar de alguna manera este

gpg --pinentry-mode loopback --passphrase-file=passphrase.txt --decrypt-files my-encrypted-gpg-file.gpg

passphrase.txt archivo contiene tu contraseña.txt, obviamente.

Espero que te ayude.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *