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
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
eecho "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.
gpg
esegua il comando corretto, non un alias o un wrapper? Prova/usr/bin/gpg --passphrase 1234 file.gpg
,type gpg
,gpg --version
eset | grep '^.\{0,9\}PG'
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.gpg --version
2.x (come in Ubuntu 18.04), passa a Xen2050 ' la risposta: unix.stackexchange.com/a/415064/237055