Jag förväntar mig att följande kommando extraherar gpg-filen utan att fråga efter lösenord:

 gpg --passphrase 1234 file.gpg 

Men det ber om lösenordet. Varför?

Detta har också samma beteende:

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

Jag använder Ubuntu med gnome 3 och kom ihåg att det fungerade i Fedora

Kommentarer

  • Är du säker på att gpg kör rätt kommando, inte ett alias eller ett omslag? Försök med /usr/bin/gpg --passphrase 1234 file.gpg, type gpg, gpg --version och set | grep '^.\{0,9\}PG'
  • Bara för rekordet, om du använder den gamla versionen av GPG, ska det fungera (på Ubuntu och sådant, det ' är gnupg1-paketet. De avråder dock från att använda det såvida du inte behöver.
  • Observera också att i GPG 2.x ber gpg --list-packets --batch myFile.gpg om en lösenfras, medan den inte ' t i GPG 1.x. Det var mitt problem (i ett program som jag ' skriver), medan jag trodde att jag hade ditt problem ( –list-paket sak som kördes först innan jag försökte dekryptera, och jag märkte inte '). Så jag gjorde ett nytt sätt att avgöra om filer var krypterade.
  • Om du har gpg --version 2.x (som i Ubuntu 18.04), hoppa till Xen2050 ' s svar: unix.stackexchange.com/a/415064/237055

Svar

Jag är i exakt samma båt (det fungerade på Fedora men inte Ubuntu). Här är ett tydligt arbete runt jag upptäckte:

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

Förklaring: Att skicka 0 orsakar --passphrase-fd för att läsa från STDIN snarare än från en fil. Så om du löser frasen kommer --passphrase-fd att acceptera din angivna lösenordssträng.

Kommentarer

  • lägger till --batch --yes till ovanstående fungerade för mig.
  • Men då får jag ett problem om jag vill kryptera data som rörs till gpg, t.ex. echo "encrypt me" | gpg --passphrarse "mypw" -c -o test.gpg. Hur löser jag detta?
  • Tja, med Ubuntu-versionen av gpg verkar echo "encrypt me" | gpg --passphrase "mypassphrase" --batch --quiet --yes --no-use-agent -c -o encrypted.gpg fungera.
  • I ' m får Inappropriate ioctl for device med och utan --batch här (på gpg (GnuPG) 2.1.18).
  • @RyanGriggs Jag tror inte det. echo "hello" | cat och echo "hello"| cat ger båda samma sträng.

Svar

Uppgraderat 04-12-2017. (Lägga till –batch för att förhindra lösenfrasprompt)

Du kan behöva lägga till --batch alternativ:

And. använder du mottagarnyckelpar kan du behöva lägga till --pinentry-mode loopback.

Från version 2 av GPG, alternativet --batch behövs för att säkerställa ingen snabb … Ok, ser att:

$ 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 

Försöker:

$ 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 

låter bra! Tja, nu:

$ 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 

Medan ingen -d -parameter ges (samma syntax som SO: s fråga), dekrypterade data från file.gpg extraheras till en ny 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 

Det fungerar bra!

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

För mottagarens nyckelfil :

Första rena tempot skapas

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. 

Då nu

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] 

Då kan sista 8char från pubfingeravtryck användas som nyckelalias.

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

Ok, nu!

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

eller

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

Ger:

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

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

eller

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

återges:

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 

Kommentarer

  • Du får ingen varning " gpg: gpg-agent är inte tillgängligt i den här sessionen " så att du förmodligen har lösenfrasen lagrad i agenten, kanske?
  • @AsfandYarQazi Nej, lösenfrasen anges i kommandoraden.
  • Det här svaret fungerade för mig. Ubuntu med gpg 1.4.16. --passphrase -parametern fungerar för batchoperationer och ' t ber om ett lösenord.
  • Detta kan verkar fungera eftersom den irriterande gpg-agenten cachar lösenfrasen. Försök att starta om systemet helt och börja om, eller ange fel – lösenfras 5678 (fel lösenfras).
  • Se det nedre svaret. Nyckeln är --pinentry-mode loopback. Det fungerar!

Svar

För gpg version 2.x du behöver inte använda --batch, bara

--pinentry-mode loopback 

fungerar med --passphrase & --passphrase-file, och låter dig ange ny info om filnamnskonflikter till exempel:

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

till skillnad från --batch som snabbt kommer att misslyckas och säger ...failed: File exists

(testad på Debian Stable / Stretch ”s gpg 2.1.18. Detta beteende att ignorera viktiga --passphrase -alternativ borde verkligen vara ett fel, om det inte redan är det)

Kommentarer

  • Detta fungerar bra även på Ubuntu 18.04 Bionic med gpg (GnuPG) 2.2.4
  • Detta fungerar på MacOS efter installation gpg med homebrew
  • Detta fungerar för mig cat your-passphrase-file.txt | gpg --pinentry-mode loopback --passphrase-fd 0 --sign your-file-to-sign.txt
  • Tack, det fungerar också för dekryptering

Svar

Det låter som om du använder gpg2. Du måste också kasta in alternativet --batch. (Om du planerar att lägga till detta i ett skript vill du också lägga till i --no-tty och förmodligen --yes.)

Kommentarer

  • Det ' s 1.4. att använda –batch har ingen effekt.
  • Ledsen då @Nima. Jag vet inte ' vad jag ska säga dig. Med GnuPG v1.4 borde du inte ' inte behöver göra något annat för att skicka lösenfrasen med något av dessa alternativ.
  • Bra anmärkning, @rsaw, hjälpte mig förhindrar lösenordsmeddelanden (och något mindre elegant eko / STDIN-alternativ).
  • – batch hjälpte även i Windows. woo hoo.

Svara

åt mig och lägga till ”–no-use-agent” löste detta för ”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 

Svar

Om med hjälp av gpg (GnuPG) 2.2.7 Enligt mansidan,

–passphrase-fd n

Läs lösenfrasen från filbeskrivare n. Endast den första raden kommer att läsas från filbeskrivaren n. Om du använder 0 för n kommer lösenfrasen att läsas från STDIN. Detta kan endast användas om endast en lösenfras tillhandahålls.

– lösenfrasfilfil

Läs lösenfrasen från filfilen. Endast första raden kommer att läsas från filfilen. Detta kan endast användas om endast en lösenfras tillhandahålls. Det är uppenbart att en lösenfras som är lagrad i en fil är tveksam om andra användare kan läsa den här filen. Använd inte det här alternativet om du kan undvika det.

– lösenfrassträng

Använd sträng som lösenfras. Detta kan bara användas om endast en lösenfras tillhandahålls. Uppenbarligen, detta är mycket tveksamt i ett fleranvändarsystem. Använd inte det här alternativet om du kan undvika det.

lägg till --pinentry-mode loopback för att fungera

Observera att sedan lösenfras sedan version 2.0 endast används om alternativet –batch också har givits . Eftersom version 2.1 måste –pinentry-mode också ställas in på loopback.

Till exempel:

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

Kommentarer

  • Är både --batch och --pinentry-mode loopback alternativ som behövs för alla – lösenfraser … alternativ för att fungera? På v.2.1.18 säger informationssidan samma sak (men inte mansidan) om batch & pinentry behövs, men fungerar fortfarande med bara –pinentry … Om båda verkligen behövs för v.2.2.7 då blir det löjligt, utvecklare introducerar allvarliga buggar medvetet

Svar

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 

Svar

Det fungerade som magi för mig:

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

Kommentarer

  • fel: gpg: no valid OpenPGP data found. gpg: processing message failed: eof. Några idéer?

Svar

har du försökt göra:

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

Källa: Här

Svar

Som nämnts i man gpg kan följande alternativ användas

–pinentry-mode-läge Ställ pinentry-läget i läge. Tillåtna värden för läge är:

 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. 

Så standard är gpg att be användaren om lösenfras, om du ändrar detta användaragentläge till ”–pinentry-mode loopback ”Det fungerar helt bra. komplett kommando

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

Svar

Jag tycker att en ganska säker metod att klara lösenordet till kommandoraden är detta:

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

Vad detta kommer att göra är att gyta kommandot ”echo” och skicka en filbeskrivare som sökväg till gpg (t.ex. / dev / fd / 63). gpg läser sedan nyckeln därifrån. Under tiden bör ekokommandot köras parallellt och bör avslutas omedelbart och lämna nyckeln på bufferten i fd.

Fördelarna är:

  • Kommandot gpg har inte lösenordet på kommandoraden
  • Ekot kommer att vara kortvarigt. I själva verket borde det vara nästan omedelbart
  • Lösenordet kommer aldrig att finnas på disken, det finns ingen fil som ska raderas och om kommandot avbryts kommer det inte att finnas några rester

Svar

Du kommer inte tro mig när jag berättar att guntu på ubuntu försöker fråga ditt lösenord om $ DISPLAY är inställt och tar det från kommandoraden – lösenord om du avmarkerar det. Detta fungerar som förväntat:

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

Bara ett annat exempel på överteknik antar jag.

Svar

Här ”sa länk till ett stackoverflow svar som kanske till ytterligare hjälp. Jag har en projekt som gör masskryptering / kryptering, och på grund av att GnuPG är mycket strikt om lösenfraser, lärde sig på det hårda sättet att --passphrase bara fungerar vid sällsynta tillfällen. --passphrase-fd -alternativet för att vara mer tillförlitligt.

Detta -skript gör ordentligt användning av alternativet --passphrase -fd och har testats offentligt via Travis-CI där du kan hitta loggar om det i aktion.

Nu ska jag inte bara lägga upp länkar till ett svar utan att ge någon exempelkod här, så här är ett uppdaterat ”fristående” skript som du kan spela med:

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

Medan ovanstående inte är lika snygg som li nked skydda på GitHub det bör vara ännu mer funktionellt än svaret länkat i början av detta inlägg.

Lycklig hacking.

Svar

En enkel metod som jag hittade på en Linux-maskin är: 1) importnyckel till gpg: => shell> gpg — import private_key.key

2) dekryptera och ge utfilnamn: => skal> gpg — utdata -d

2.1) Att ge ovanstående kommando kommer att uppmana dig att skriva in parafras. Ange parafrasen och dekryptera gpg-filen.

Svar

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

Kommentarer

  • det vore trevligt om du kunde förklara varför detta skulle lösa problemet
  • Medan detta kodavsnitt kan lösa frågan, inklusive en förklaring hjälper verkligen att förbättra kvaliteten på ditt inlägg. Kom ihåg att du svarar på frågan för läsarna i framtiden, inte bara den som ställer nu! Vänligen redigera ditt svar för att lägga till förklaring och ge en indikation på vilka begränsningar och antaganden som gäller.

Svar

Lägg i slutet av ~/.gnupg/gpg.conf:

use-agent pinentry-mode loopback 

Lägg i slutet av (kanske ny) fil ~/.gnupg/gpg-agent.conf:

allow-loopback-pinentry 

Och kör sedan det här kommandot :

echo RELOADAGENT | gpg-connect-agent 

Nu kan du köra detta utan att fråga lösenord:

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" 

Där $ 1 är texten som ska krypteras är $ 2 användar-ID och $ 3 lösenordet.

Obs! Jag kan inte komma ihåg varför det fungerar, men det fungerar. Om du vet detaljerna, redigera och sätt in här.

Svar

för Ubuntu 18.04 fungerade detta för mig-

kryptera:

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

dekryptera:

gpg some-file.tgz.gpg 

Svar

Även jag stod inför samma problem. Men ingen o f kommandona som nämns här fungerade inte och jag kollade också olika svar med olika kommandon men ingenting fungerade.

Jag var på Ubuntu 20.04.1 LTS

Efter mycket huvudbasning och experiment på något sätt

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

passphrase.txt innehåller din lösenfras.txt, obvisulyly.

Hoppas att det kommer att hjälpa.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *