Jattends la commande suivante pour extraire le fichier gpg sans demander de mot de passe:

 gpg --passphrase 1234 file.gpg 

Mais il demande le mot de passe. Pourquoi?

Cela a aussi le même comportement:

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

Jutilise Ubuntu avec gnome 3, et je me souviens que cela fonctionnait dans Fedora

Commentaires

  • Etes-vous sûr gpg dexécuter la bonne commande, pas un alias ni un wrapper? Essayez /usr/bin/gpg --passphrase 1234 file.gpg, type gpg, gpg --version et set | grep '^.\{0,9\}PG'
  • Pour mémoire, si vous utilisez lancienne version de GPG, cela devrait fonctionner (sur Ubuntu et autres, ' est le paquet gnupg1. Cependant, ils découragent de lutiliser à moins que vous ne deviez le faire.
  • Notez également que dans GPG 2.x gpg --list-packets --batch myFile.gpg demande une phrase de passe, alors que ce nest pas le cas ' t dans GPG 1.x. Cétait mon problème (dans un programme que jécris '), alors que je pensais avoir votre problème (le –list-packets chose exécutée en premier, avant dessayer de déchiffrer, et je nai ' t avis). Jai donc créé une nouvelle façon de déterminer si les fichiers étaient chiffrés.
  • Si vous avez gpg --version 2.x (comme dans Ubuntu 18.04), passez à Xen2050 ' réponse: unix.stackexchange.com/a/415064/237055

Réponse

Je suis exactement dans votre bateau (cela a fonctionné sur Fedora mais pas Ubuntu). Voici un travail apparent que jai découvert:

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

Explication: Passer 0 cause --passphrase-fd pour lire depuis STDIN plutôt que depuis un fichier. Ainsi, le piping de la phrase de passe obtiendra --passphrase-fd pour accepter la chaîne de mot de passe spécifiée.

Commentaires

  • ajout --batch --yes à ce qui précède a fonctionné pour moi.
  • Mais alors jobtiens un problème, si je veux crypter les données qui sont acheminées dans gpg, par exemple echo "encrypt me" | gpg --passphrarse "mypw" -c -o test.gpg. Comment résoudre ce problème?
  • Eh bien, avec la version Ubuntu de gpg, echo "encrypt me" | gpg --passphrase "mypassphrase" --batch --quiet --yes --no-use-agent -c -o encrypted.gpg semble fonctionner.
  • Je ' m obtenir Inappropriate ioctl for device avec et sans --batch ici (sur gpg (GnuPG) 2.1.18).
  • @RyanGriggs Je ne pense pas. echo "hello" | cat et echo "hello"| cat donnent tous deux la même chaîne.

Réponse

Mise à jour 04/12/2017. (Ajout de –batch afin déviter linvite de phrase de passe)

Vous devrez peut-être ajouter loption --batch:

Et. si vous utilisez une paire de clés de destinataire , vous devrez peut-être ajouter --pinentry-mode loopback également.

À partir de la version 2 de GPG, loption --batch est nécessaire pour garantir labsence dinvite … Ok, en regardant ça:

$ 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 

Essayer:

$ 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 

sonne bien! Eh bien, maintenant:

$ 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 

Bien quaucun paramètre -d ne soit donné (même syntaxe que la question de SO), les données déchiffrées de file.gpg seront extraites vers un nouveau 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 

Cela fonctionne bien!

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

Pour fichier de clé du destinataire :

Première création de tempo propre

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. 

Hmm.

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. 

Alors maintenant

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] 

Ensuite, les 8 derniers caractères de lempreinte digitale du pub pourraient être utilisés comme alias de clé.

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

Ok, maintenant!

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

ou

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

Donnera:

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

Ensuite,

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

ou

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

affichera:

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 

Commentaires

  • Vous ne recevez pas lavertissement " gpg: gpg-agent nest pas disponible dans cette session " donc vous avez probablement la phrase de passe stockée dans lagent, peut-être?
  • @AsfandYarQazi Non, la phrase de passe est entrée en ligne de commande.
  • Cette réponse a fonctionné pour moi. Ubuntu avec gpg 1.4.16. Le paramètre --passphrase fonctionne pour les opérations par lots et ne demande ' t quun mot de passe.
  • Cela peut semblent fonctionner parce que le gpg-agent ennuyeux met en cache la phrase de passe. Essayez de redémarrer complètement le système et de recommencer, ou de saisir une mauvaise – phrase de passe 5678 (mauvaise phrase de passe).
  • Voir la réponse inférieure. La clé est --pinentry-mode loopback. Ça marche!

Réponse

Pour gpg version 2.x vous navez pas besoin dutiliser --batch, juste

--pinentry-mode loopback 

fonctionne avec --passphrase & --passphrase-file, et vous permettra de saisir de nouvelles informations, en cas de conflit de nom de fichier par exemple:

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

contrairement à --batch qui échouera rapidement, en disant ...failed: File exists

(testé sur Debian Stable / Stretch « s gpg 2.1.18. Ce comportement consistant à ignorer les options --passphrase importantes devrait vraiment être un bogue, sil ne lest pas déjà)

Commentaires

  • Cela fonctionne bien aussi sur Ubuntu 18.04 Bionic avec gpg (GnuPG) 2.2.4
  • Cela fonctionne sur MacOS après linstallation gpg avec homebrew
  • Cela fonctionne pour moi cat your-passphrase-file.txt | gpg --pinentry-mode loopback --passphrase-fd 0 --sign your-file-to-sign.txt
  • Merci, cela fonctionne également pour le décryptage

Réponse

On dirait que vous « utilisez gpg2. Vous devez également ajouter loption --batch. (Si vous « prévoyez dajouter ceci à un script, vous » voudrez également ajouter --no-tty et probablement --yes.)

Commentaires

  • Il ' s 1.4. lutilisation de –batch na aucun effet.
  • Désolé alors @Nima. Je ' ne sais pas quoi vous dire. Avec GnuPG v1.4, vous ne devriez ' avoir rien dautre à faire pour passer la phrase de passe avec lune ou lautre de ces options.
  • Bonne note, @rsaw, aidé me empêche les invites de mot de passe (et loption echo / STDIN légèrement moins élégante).
  • –batch a aidé même dans Windows. woo hoo.

Réponse

pour moi, lajout de « –no-use-agent » a résolu ce problème pour « 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 

Réponse

Si using gpg (GnuPG) 2.2.7 Selon la page de manuel,

–passphrase-fd n

Lire la phrase de passe sur descripteur de fichier n. Seule la première ligne sera lue à partir du descripteur de fichier n. Si vous utilisez 0 pour n, la phrase de passe sera lue à partir de STDIN. Cela ne peut être utilisé que si une seule phrase de passe est fournie.

–passphrase-file file

Lire la phrase de passe à partir du fichier. Seule la première ligne sera lue à partir du fichier fichier. Cela ne peut être utilisé que si une seule phrase de passe est fournie. De toute évidence, une phrase de passe stockée dans un fichier est dune sécurité douteuse si dautres utilisateurs peuvent lire ce fichier. Nutilisez pas cette option si vous pouvez léviter.

–chaîne de phrase de passe

Utilisez une chaîne comme phrase de passe. Cela ne peut être utilisé que si une seule phrase de passe est fournie. Évidemment, cest dune sécurité très discutable sur un système multi-utilisateur. Nutilisez pas cette option si vous pouvez léviter.

add --pinentry-mode loopback pour fonctionner

Notez que depuis la version 2.0 cette phrase de passe nest utilisée que si loption –batch a également été donnée . Depuis la version 2.1, le –pinentry-mode doit également être défini sur loopback.

Par exemple:

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

Commentaires

  • Sont à la fois --batch et --pinentry-mode loopback options nécessaires pour que nimporte quelle option –passphrase … fonctionne? Sur la version 2.1.18, la page dinformations dit la même chose (mais pas la page de manuel) à propos du lot & pinentry nécessaire, mais fonctionne toujours avec uniquement –pinentry … Si les deux sont vraiment nécessaires pour la version 2.2.7 alors les choses deviennent ridicules, les développeurs introduisent volontairement des bogues sérieux

Answer

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 

Réponse

Cela a fonctionné comme par magie pour moi:

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

Commentaires

  • erreur: gpg: no valid OpenPGP data found. gpg: processing message failed: eof. Des idées?

Réponse

avez-vous essayé de faire:

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

Source: Ici

Réponse

Comme mentionné dans man gpg, loption suivante peut être utilisée

–pinentry-mode mode Définit le mode pinentry sur mode. Les valeurs autorisées pour le mode sont:

 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. 

Le comportement par défaut de gpg est donc dinviter lutilisateur à entrer une phrase de passe, si vous changez ce mode dagent utilisateur en « –pinentry-mode loopback « Cela fonctionne parfaitement bien. commande complète

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

Answer

Je pense que cest une méthode assez sécurisée pour passer le mot de passe de la ligne de commande est le suivant:

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

Ce que cela fera est de générer la commande « echo » et de passer un descripteur de fichier comme nom de chemin à gpg (par exemple / dev / fd / 63). gpg lira alors la clé à partir de là. En attendant, la commande echo doit sexécuter en parallèle et se terminer instantanément, laissant la clé sur le buffer du fd.

Les avantages sont:

  • La commande gpg naura pas le mot de passe sur sa ligne de commande
  • Lécho sera de courte durée. En fait, il devrait être quasi instantané
  • Le mot de passe ne résidera jamais sur le disque, il ny aura pas de fichier à supprimer et si la commande est interrompue il ny aura pas de restes

Réponse

Vous ne me croyez pas quand je vous dis que sur ubuntu gpg essaie de vous demander votre mot de passe si $ DISPLAY est défini et le prend à partir de la ligne de commande –password si vous le désélectionnez. Cela fonctionne comme prévu:

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

Juste un autre exemple de sur-ingénierie je suppose.

Réponse

Ici « sa lien vers un stackoverflow réponse qui peut-être une aide supplémentaire; jai un projet qui effectue un décryptage / chiffrement en masse, et en raison du fait que GnuPG est très strict sur les phrases de passe, a appris à ses dépens que --passphrase ne fonctionne quen de rares occasions. loption --passphrase-fd pour être plus fiable.

Ce script rend correct utilisation de loption --passphrase -fd, et a été testé publiquement via Travis-CI où vous pouvez trouver des journaux en action.

Maintenant, je ne vais pas simplement publier des liens vers une réponse sans fournir un exemple de code ici, alors voici un script « autonome » mis à jour avec lequel vous pouvez jouer:

#!/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}>&- 

Alors que ce qui précède nest pas aussi sophistiqué que le li nked protect sur GitHub, il devrait être encore plus fonctionnel que la réponse liée au début de cet article.

Bon piratage.

Réponse

Une méthode simple que jai trouvée en travaillant sur une machine Linux est: 1) importer la clé dans gpg: => shell> gpg —import private_key.key

2) décrypter en donnant le nom du fichier: => shell> gpg —output -d

2.1) Donner la commande ci-dessus vous demandera dentrer la paraphrase. Saisissez la paraphrase et il décryptera le fichier gpg.

Réponse

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

Commentaires

  • ce serait bien si vous pouviez expliquer pourquoi cela devrait résoudre le problème
  • Bien que cet extrait de code puisse résoudre la question, y compris une explication aide vraiment à améliorer la qualité de votre message. Noubliez pas que vous répondez à la question des lecteurs à lavenir, pas seulement à la personne qui la pose maintenant! Veuillez modifier votre réponse pour ajouter une explication et donner une indication des limitations et hypothèses applicables.

Réponse

Mettre à la fin de ~/.gnupg/gpg.conf:

use-agent pinentry-mode loopback 

Mettre à la fin du (peut-être nouveau) fichier ~/.gnupg/gpg-agent.conf:

allow-loopback-pinentry 

Et puis exécutez cette commande :

echo RELOADAGENT | gpg-connect-agent 

Vous pouvez maintenant lexécuter sans demander de mot de passe:

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" 

Où $ 1 est le texte à chiffrer, $ 2 est lID utilisateur et $ 3 le mot de passe.

Remarque: Je ne me souviens pas pourquoi cela fonctionne, mais cela fonctionne. Si vous connaissez les détails, veuillez modifier et insérer ici.

Réponse

pour Ubuntu 18.04 cela a fonctionné pour moi-

crypter:

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

décrypter:

gpg some-file.tgz.gpg 

Réponse

Même moi, jétais confronté au même problème. Mais aucun o f les commandes mentionnées ici nont pas fonctionné et jai également vérifié différentes réponses avec différentes commandes mais rien na fonctionné.

Jétais sur Ubuntu 20.04.1 LTS

Après beaucoup de coups de tête et dexpérimentation dune manière ou dune autre, ce fichier

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

passphrase.txt contient votre mot de passe.txt, évidemment.

Jespère que cela vous aidera.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *