Mi aspetto che il seguente comando estragga il file gpg senza chiedere la password:

 gpg --passphrase 1234 file.gpg 

Ma chiede la password. Perché?

Anche questo ha lo stesso comportamento:

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

Uso Ubuntu con gnome 3 e ricordo che funzionava in Fedora

Commenti

  • Sei sicuro che gpg esegua il comando corretto, non un alias o un wrapper? Prova /usr/bin/gpg --passphrase 1234 file.gpg, type gpg, gpg --version e set | grep '^.\{0,9\}PG'
  • Solo per la cronaca, se usi la vecchia versione di GPG, dovrebbe funzionare (su Ubuntu e simili, ' è il pacchetto gnupg1. Tuttavia, sconsigliano di usarlo a meno che non sia necessario.
  • Nota inoltre che in GPG 2.x gpg --list-packets --batch myFile.gpg richiede una passphrase, mentre ' t in GPG 1.x. Questo era il mio problema (in un programma che ' sto scrivendo), mentre pensavo di avere il tuo problema (il –list-packets è stata eseguita per prima, prima di tentare di decrittografare, e non ho ' notato). Quindi, ho creato un nuovo modo per determinare se i file erano crittografati.
  • Se hai gpg --version 2.x (come in Ubuntu 18.04), passa a Xen2050 ' la risposta: unix.stackexchange.com/a/415064/237055

Risposta

Sono nella tua stessa identica barca (ha funzionato su Fedora ma non su Ubuntu). Ecco un apparente lavoro intorno che ho scoperto:

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

Spiegazione: il passaggio di 0 causa --passphrase-fd per leggere da STDIN piuttosto che da un file. Quindi, inviando la passphrase, --passphrase-fd accetterà la stringa della password specificata.

Commenti

  • aggiunta --batch --yes quanto sopra ha funzionato per me.
  • Ma poi ho un problema, se voglio crittografare i dati che vengono reindirizzati in gpg, ad es. echo "encrypt me" | gpg --passphrarse "mypw" -c -o test.gpg. Come risolvo questo problema?
  • Bene, con la versione Ubuntu di gpg, echo "encrypt me" | gpg --passphrase "mypassphrase" --batch --quiet --yes --no-use-agent -c -o encrypted.gpg sembra funzionare.
  • I ' m ottenere Inappropriate ioctl for device con e senza --batch qui (su gpg (GnuPG) 2.1.18).
  • @RyanGriggs Non credo. echo "hello" | cat e echo "hello"| cat restituiscono entrambi la stessa stringa.

Risposta

Aggiornato il 04/12/2017. (Aggiunta di –batch per impedire la richiesta della passphrase)

Potrebbe essere necessario aggiungere lopzione --batch:

And. se utilizzi la coppia di chiavi del destinatario potresti dover aggiungere anche --pinentry-mode loopback.

Dalla versione 2 di GPG, lopzione --batch è necessaria per garantire lassenza di prompt … Ok, sembra che:

$ 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 

Sto provando:

$ 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 

suona bene! Bene, ora:

$ 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 

sebbene non venga fornito alcun parametro -d (stessa sintassi della domanda di SO), i dati decrittografati da file.gpg verranno estratti in un nuovo 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 

Funziona bene!

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

Per file di chiavi del destinatario :

Prima creazione di tempo pulito

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. 

Allora adesso

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] 

Quindi gli ultimi 8 caratteri dellimpronta digitale del pub potrebbero essere utilizzati come alias chiave.

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

Ok, ora!

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

Quindi

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 

visualizzerà:

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 

Commenti

  • Non ricevi lavviso " gpg: gpg-agent non è disponibile in questa sessione " quindi probabilmente hai la passphrase memorizzata nellagente, forse?
  • @AsfandYarQazi No, la passphrase è inserita nella riga di comando.
  • Questa risposta ha funzionato per me. Ubuntu con gpg 1.4.16. Il parametro --passphrase funziona per le operazioni batch e ' non richiede una password.
  • Questo potrebbe sembrano funzionare perché il fastidioso gpg-agent sta memorizzando la passphrase nella cache. Prova a riavviare completamente il sistema e ricomincia da capo, oppure a inserire la –passphrase 5678 errata (passphrase errata).
  • Vedi la risposta in basso. La chiave è --pinentry-mode loopback. Funziona!

Risposta

Per gpg versione 2.x non è necessario utilizzare --batch, solo

--pinentry-mode loopback 

funziona con --passphrase & --passphrase-file e ti consentirà di inserire nuove informazioni, in caso di conflitti di nomi di file, ad esempio:

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

a differenza di --batch che fallirà rapidamente, dicendo ...failed: File exists

(testato su Debian Stable / Stretch “s gpg 2.1.18. Questo comportamento di ignorare le opzioni --passphrase dovrebbe essere davvero un bug, se non lo è già)

Commenti

  • Funziona bene anche su Ubuntu 18.04 Bionic con gpg (GnuPG) 2.2.4
  • Funziona su MacOS dopo linstallazione gpg con homebrew
  • Per me funziona cat your-passphrase-file.txt | gpg --pinentry-mode loopback --passphrase-fd 0 --sign your-file-to-sign.txt
  • Grazie, funziona anche per la decrittazione

Risposta

Sembra che tu stia usando gpg2. Devi inserire anche lopzione --batch. (Se hai intenzione di aggiungerlo a uno script, dovrai aggiungerlo anche in --no-tty e probabilmente --yes.)

Commenti

  • It ' s 1.4. lutilizzo di –batch non ha alcun effetto.
  • Spiacenti, @Nima. Non ' non so cosa dirti. Con GnuPG v1.4 non dovresti ' bisogno di fare nientaltro per passare la passphrase con nessuna di queste opzioni.
  • Buona nota, @rsaw, ha aiutato mi impedisce la richiesta di password (e lopzione echo / STDIN leggermente meno elegante).
  • –batch ha aiutato anche in Windows. woo hoo.

Answer

per me, laggiunta di “–no-use-agent” ha risolto il problema per “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 

Risposta

Se utilizzando gpg (GnuPG) 2.2.7 Secondo la pagina man,

–passphrase-fd n

Leggi la passphrase da descrittore di file n. Solo la prima riga verrà letta dal descrittore di file n. Se usi 0 per n, la passphrase verrà letta da STDIN. Può essere utilizzato solo se viene fornita una sola passphrase.

–passphrase-file file

Legge la passphrase dal file file. Solo la prima riga verrà letta dal file file. Può essere utilizzato solo se viene fornita una sola passphrase. Ovviamente, una passphrase memorizzata in un file è di dubbia sicurezza se altri utenti possono leggere questo file. Non utilizzare questa opzione se puoi evitarlo.

–passphrase string

Usa stringa come passphrase. Può essere utilizzata solo se viene fornita una sola passphrase. Ovviamente, si tratta di una sicurezza molto discutibile su un sistema multiutente. Non utilizzare questa opzione se puoi evitarlo.

add --pinentry-mode loopback per funzionare

Nota che dalla versione 2.0 questa passphrase viene utilizzata solo se è stata data anche lopzione –batch . Dalla versione 2.1 anche –pinentry-mode deve essere impostato su loopback.

Ad esempio:

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

Commenti

  • Sono entrambi --batch e --pinentry-mode loopback opzioni necessarie affinché qualsiasi opzione –passphrase … funzioni? Nella v.2.1.18 la pagina delle informazioni dice la stessa cosa (ma non la pagina man) sul batch & pinentry necessario, ma funziona ancora solo con –pinentry … Se entrambi sono davvero necessari per la v.2.2.7, quindi le cose stanno diventando ridicole, gli sviluppatori stanno introducendo bug seri di proposito

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 

Risposta

Ha funzionato come per magia per me:

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

Commenti

  • errore: gpg: no valid OpenPGP data found. gpg: processing message failed: eof. Qualche idea?

Risposta

hai provato a fare:

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

Fonte: qui

Risposta

Come menzionato in man gpg, è possibile utilizzare la seguente opzione

–pinentry-mode mode Imposta la modalità pinentry su mode. I valori consentiti per la modalità sono:

 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. 

Quindi il comportamento predefinito di gpg è di richiedere allutente la passphrase, se si cambia questa modalità agente utente in “–pinentry-mode loopback “Funziona perfettamente. comando completo

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

Risposta

Penso che sia un metodo abbastanza sicuro da passare la password per la riga di comando è questa:

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

Ciò che farà è generare il comando “echo” e passare un descrittore di file come nome di percorso a gpg (ad esempio / dev / fd / 63). gpg leggerà quindi la chiave da lì. Nel frattempo, il comando echo dovrebbe essere eseguito in parallelo e dovrebbe terminare istantaneamente, lasciando la chiave sul buffer di fd.

I vantaggi sono:

  • Il comando gpg non avrà la password sulla sua riga di comando
  • Leco avrà vita breve. Infatti dovrebbe essere quasi istantaneo
  • La password non risiederà mai sul disco, non ci sarà un file da cancellare e se il comando viene interrotto non ci saranno avanzi

Risposta

Non mi crederai quando ti dico che su ubuntu gpg prova a chiedere la tua password se $ DISPLAY è impostato e lo prende dalla riga di comando –password se lo annulli. Funziona come previsto:

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

Immagino che sia solo un altro esempio di ingegneria eccessiva.

Risposta

Qui “sa link a una risposta stackoverflow che potrebbe essere di ulteriore aiuto; ho un progetto che esegue la decrittografia / crittografia in blocco e, poiché GnuPG è molto severo riguardo alle passphrase, ha imparato a proprie spese che --passphrase funziona solo in rare occasioni. lopzione --passphrase-fd per essere più affidabile.

Questo script rende corretto utilizza lopzione --passphrase -fd ed è stato testato pubblicamente tramite Travis-CI dove puoi trovare i log in azione.

Ora non pubblicherò solo link a una risposta senza fornire un codice di esempio qui, quindi ecco uno script “stand alone” aggiornato con cui puoi giocare:

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

Anche se quanto sopra non è così elegante come li nked protect su GitHub, dovrebbe essere ancora più funzionale della risposta collegata allinizio di questo post.

Buon hacking.

Risposta

Un metodo semplice che ho trovato lavorando su una macchina Linux è: 1) import key to gpg: => shell> gpg —import private_key.key

2) decifrare fornendo il nome del file out: => shell> gpg —output -d

2.1) Dando il comando sopra ti verrà chiesto di inserire la parafrasi. Inserisci la parafrasi e decodificherà il file gpg.

Risposta

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

Commenti

  • sarebbe carino se tu potessi spiegare perché questo dovrebbe risolvere il problema
  • Sebbene questo frammento di codice possa risolvere la domanda, inclusa una spiegazione aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro, non solo alla persona che lo chiede ora! modifica la tua risposta per aggiungere una spiegazione e fornire unindicazione delle limitazioni e dei presupposti applicabili.

Risposta

Inserire alla fine di ~/.gnupg/gpg.conf:

use-agent pinentry-mode loopback 

Metti alla fine del (forse nuovo) file ~/.gnupg/gpg-agent.conf:

allow-loopback-pinentry 

E poi esegui questo comando :

echo RELOADAGENT | gpg-connect-agent 

Ora puoi eseguirlo senza chiedere la password:

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" 

Dove $ 1 è il testo da crittografare, $ 2 è lID utente e $ 3 la password.

Nota: non ricordo perché funziona, ma funziona. Se conosci i dettagli, si prega di modificare e inserire qui.

Risposta

per Ubuntu 18.04 questo ha funzionato per me-

crittografa:

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

decrittografa:

gpg some-file.tgz.gpg 

Risposta

Anche io stavo affrontando lo stesso problema, ma nessuno o Se i comandi qui menzionati non hanno funzionato e ho anche verificato diverse risposte con comandi diversi ma niente ha funzionato.

Ero su Ubuntu 20.04.1 LTS

Dopo un sacco di colpi di testa e di esperimenti in qualche modo questo file

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

passphrase.txt contiene la tua passphrase.txt, ovviamente.

Spero che ti sia daiuto.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *