Ik verwacht dat de volgende opdracht het gpg-bestand extraheert zonder om wachtwoord te vragen:

 gpg --passphrase 1234 file.gpg 

Maar het vraagt om het wachtwoord. Waarom?

Dit heeft ook hetzelfde gedrag:

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

Ik gebruik Ubuntu met gnome 3, en onthoud dat het werkte in Fedora

Reacties

  • Weet je zeker dat gpg het juiste commando uitvoert, geen alias of wrapper? Probeer /usr/bin/gpg --passphrase 1234 file.gpg, type gpg, gpg --version en set | grep '^.\{0,9\}PG'
  • Voor de duidelijkheid, als je de oude versie van GPG gebruikt, zou het moeten werken (op Ubuntu en dergelijke, het ' s het gnupg1-pakket. Ze raden het gebruik ervan echter af, tenzij het moet.
  • Merk ook op dat in GPG 2.x gpg --list-packets --batch myFile.gpg om een wachtwoordzin vraagt, terwijl ' t in GPG 1.x. Dat was mijn probleem (in een programma dat ik ' m schrijf), terwijl ik dacht dat ik jouw probleem had (de –list-packets ding dat eerst werd uitgevoerd, voordat ik probeerde te ontsleutelen, en ik heb het ' niet opgemerkt). Dus ik heb een nieuwe manier bedacht om te bepalen of bestanden waren versleuteld.
  • Als je gpg --version 2.x hebt (zoals in Ubuntu 18.04), ga dan naar Xen2050 ' s antwoord: unix.stackexchange.com/a/415064/237055

Antwoord

Ik zit in exact hetzelfde schuitje (het werkte op Fedora maar niet op Ubuntu). Hier is een duidelijk werk dat ik ontdekte:

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

Uitleg: 0 doorgeven veroorzaakt --passphrase-fd om uit STDIN te lezen in plaats van uit een bestand. Als u de wachtwoordzin doorgeeft, krijgt u --passphrase-fd om uw opgegeven wachtwoordreeks te accepteren.

Opmerkingen

  • toevoegen --batch --yes naar het bovenstaande werkte voor mij.
  • Maar dan krijg ik een probleem, als ik gegevens wil versleutelen die naar gpg worden gestuurd, bijv. echo "encrypt me" | gpg --passphrarse "mypw" -c -o test.gpg. Hoe los ik dit op?
  • Nou, met de Ubuntu-versie van gpg lijkt echo "encrypt me" | gpg --passphrase "mypassphrase" --batch --quiet --yes --no-use-agent -c -o encrypted.gpg te werken.
  • I ' m krijgt Inappropriate ioctl for device met en zonder --batch hier (op gpg (GnuPG) 2.1.18).
  • @RyanGriggs Ik denk het niet. echo "hello" | cat en echo "hello"| cat leveren beide dezelfde string op.

Antwoord

Bijgewerkt 04-12-2017. (Toevoegen van –batch om wachtwoordzinprompt te voorkomen)

Mogelijk moet u de --batch optie toevoegen:

En. gebruikt u het sleutelpaar van de ontvanger , dan moet u mogelijk ook --pinentry-mode loopback toevoegen.

Vanaf versie 2 van GPG, de optie --batch is nodig om er zeker van te zijn dat er geen prompt … Ok, wat eruit ziet:

$ 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 

Proberen:

$ 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 

klinkt goed! Welnu:

$ 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 

Hoewel er geen -d -parameter wordt gegeven (dezelfde syntaxis als de vraag van SO), gedecodeerde gegevens van file.gpg worden geëxtraheerd naar een nieuwe 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 

Dit werkt goed!

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

Voor sleutelbestand ontvanger :

Eerste opschonen tempo maken

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. 

En dan 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] 

Dan zou de laatste 8char van pub-vingerafdruk kunnen worden gebruikt als sleutelalias.

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 

of

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

Geeft:

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

Dan

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

of

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

zal weergeven:

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 

Reacties

  • Je krijgt de waarschuwing niet " gpg: gpg-agent is niet beschikbaar in deze sessie " dus de wachtwoordzin is waarschijnlijk opgeslagen in de agent, misschien?
  • @AsfandYarQazi Nee, de wachtwoordzin wordt op de opdrachtregel ingevoerd.
  • Dit antwoord werkte voor mij. Ubuntu met gpg 1.4.16. De parameter --passphrase werkt voor batchbewerkingen en ' vraagt niet om een wachtwoord.
  • Dit kan lijken te werken omdat de irritante gpg-agent de wachtwoordzin in het cachegeheugen plaatst. Probeer het systeem volledig opnieuw op te starten en opnieuw te beginnen, of voer de verkeerde –passphrase 5678 (verkeerde passphrase) in.
  • Zie lager antwoord. De sleutel is --pinentry-mode loopback. Het werkt!

Answer

Voor gpg versie 2.x hoeft u --batch niet te gebruiken, alleen

--pinentry-mode loopback 

werkt met --passphrase & --passphrase-file, en laat je nieuwe informatie invoeren, bijvoorbeeld in geval van bestandsnaamconflicten:

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

in tegenstelling tot --batch die snel zal mislukken door ...failed: File exists

te zeggen

(getest op Debian Stable / Stretch “s gpg 2.1.18. Dit gedrag van het negeren van belangrijke --passphrase opties zou echt een bug moeten zijn, als dit nog niet het geval is)

Reacties

  • Dit werkt ook goed op Ubuntu 18.04 Bionic met gpg (GnuPG) 2.2.4
  • Dit werkt op MacOS na installatie gpg met homebrew
  • Dit werkt voor mij cat your-passphrase-file.txt | gpg --pinentry-mode loopback --passphrase-fd 0 --sign your-file-to-sign.txt
  • Bedankt, het werkt ook voor decodering

Antwoord

Het klinkt alsof je gpg2 gebruikt. U moet ook de optie --batch invoeren. (Als u van plan bent dit aan een script toe te voegen, wilt u dit ook toevoegen aan --no-tty en waarschijnlijk --yes.)

Reacties

  • Het ' s 1.4. het gebruik van –batch heeft geen effect.
  • Sorry dan @Nima. Ik weet niet ' wat ik je moet vertellen. Met GnuPG v1.4 zou je ' niets anders moeten doen om de wachtwoordzin door te geven met een van deze opties.
  • Goede opmerking, @rsaw, hielp ik voorkom wachtwoordprompts (en iets minder elegante echo / STDIN-optie).
  • –batch hielp zelfs in vensters. woo hoo.

Antwoord

voor mij, het toevoegen van “–no-use-agent” loste dit op voor “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 

Antwoord

Als met gpg (GnuPG) 2.2.7 Volgens de man-pagina,

–passphrase-fd n

Lees de wachtwoordzin van bestandsdescriptor n. Alleen de eerste regel wordt gelezen uit bestandsdescriptor n. Als u 0 voor n gebruikt, wordt de wachtwoordzin uit STDIN gelezen. Dit kan alleen worden gebruikt als er maar één wachtwoordzin is opgegeven.

–passphrase-file file

Lees de passphrase uit het bestand. Alleen de eerste regel wordt gelezen uit het bestandsbestand. Dit kan alleen worden gebruikt als er slechts één wachtwoordzin is opgegeven. Het is duidelijk dat een wachtwoordzin die in een bestand is opgeslagen, twijfelachtig is als andere gebruikers dit bestand kunnen lezen. Gebruik deze optie niet als u deze kunt vermijden.

–passphrase string

Gebruik string als de wachtwoordzin. Dit kan alleen worden gebruikt als er slechts één wachtwoordzin is opgegeven. Het is duidelijk dat dit is een zeer twijfelachtige beveiliging op een systeem met meerdere gebruikers. Gebruik deze optie niet als u deze kunt vermijden.

add --pinentry-mode loopback om te werken

Merk op dat sinds versie 2.0 deze wachtwoordzin alleen wordt gebruikt als de optie –batch ook is gegeven . Sinds versie 2.1 moet de –pinentry-mode ook worden ingesteld op loopback.

Bijvoorbeeld:

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

Reacties

  • Zijn beide --batch en --pinentry-mode loopback opties nodig om elke –passphrase … optie te laten werken? Op v.2.1.18 zegt de info-pagina hetzelfde (maar niet de man-pagina) over batch & pinentry nodig, maar werkt nog steeds met alleen –pinentry … Als beide echt nodig zijn voor v.2.2.7, dan wordt het belachelijk, ontwikkelaars introduceren expres serieuze bugs

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 

Antwoord

Het werkte als magie voor mij:

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

Reacties

  • fout: gpg: no valid OpenPGP data found. gpg: processing message failed: eof. Enig idee?

Antwoord

heb je geprobeerd te doen:

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

Bron: Hier

Antwoord

Zoals vermeld in man gpg kan de volgende optie worden gebruikt.

–pinentry-mode mode Zet de pinentry-mode op mode. Toegestane waarden voor mode zijn:

 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. 

Dus het standaardgedrag van gpg is om de gebruiker om een wachtwoordzin te vragen, als deze user agent-modus wordt gewijzigd in “–pinentry-mode loopback “Het werkt prima. complete opdracht

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

Antwoord

Ik denk dat dit een vrij veilige methode is om te slagen het wachtwoord voor de opdrachtregel is dit:

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

Wat dit zal doen is het “echo” -commando spawnen en een bestandsdescriptor als padnaam doorgeven aan gpg (bijv. / dev / fd / 63). gpg leest dan de sleutel vanaf daar. In de tussentijd zou het echo-commando parallel moeten lopen en onmiddellijk moeten eindigen, waarbij de sleutel in de buffer van de fd blijft.

Voordelen zijn:

  • Het gpg commando zal het wachtwoord niet op de commandoregel hebben.
  • De echo zal van korte duur zijn. In feite zou het bijna onmiddellijk moeten zijn.
  • Het wachtwoord zal nooit op de schijf staan, er zal geen bestand zijn om te verwijderen en als het commando wordt onderbroken, zullen er geen overblijfselen zijn

Answer

Je zult me niet geloven als ik je vertel dat gpg op ubuntu je wachtwoord probeert te vragen als $ DISPLAY is ingesteld en neemt het over van commandline –password als je het uitschakelt. Dit werkt zoals verwacht:

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

Gewoon weer een voorbeeld van over-engineering denk ik.

Antwoord

Hier “sa link naar een stackoverflow antwoord dat misschien van verdere hulp is; ik heb een project dat bulksgewijs ontsleutelen / versleutelen uitvoert, en omdat GnuPG erg streng is over wachtzinnen, leerde het op de harde manier dat --passphrase slechts in zeldzame gevallen werkt. de --passphrase-fd optie om betrouwbaarder te zijn.

Dit script maakt juist gebruik van de --passphrase -fd optie, en is publiekelijk getest via Travis-CI waar je er logboeken van kunt vinden in actie.

Nu ga ik niet zomaar links naar een antwoord posten zonder hier een voorbeeldcode op te geven, dus hier is een bijgewerkt “stand alone” -script waarmee je kunt spelen:

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

Hoewel het bovenstaande niet zo luxe is als de li nked protect op GitHub het zou zelfs functioneler moeten zijn dan het antwoord dat aan het begin van dit bericht is gelinkt.

Veel plezier met hacken.

Antwoord

Een eenvoudige methode die ik vond werken op een linux-machine is: 1) importeer sleutel naar gpg: => shell> gpg —import private_key.key

2) decoderen met de naam van het outfile: => shell> gpg —output -d

2.1) Door het bovenstaande commando te geven, wordt je gevraagd een parafrase in te voeren. Voer de parafrase in en het zal het gpg-bestand ontsleutelen.

Answer

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

Opmerkingen

  • het zou leuk zijn als je zou kunnen uitleggen waarom dit het probleem zou moeten oplossen
  • Hoewel dit codefragment de vraag kan oplossen, inclusief een uitleg helpt echt om de kwaliteit van uw bericht te verbeteren. Onthoud dat u de vraag voor lezers in de toekomst beantwoordt, niet alleen de persoon die het nu stelt! bewerk uw antwoord om uitleg toe te voegen, en geef een indicatie van welke beperkingen en aannames van toepassing zijn.

Antwoord

Zet aan het einde van ~/.gnupg/gpg.conf:

use-agent pinentry-mode loopback 

Plaats aan het einde van (misschien nieuw) bestand ~/.gnupg/gpg-agent.conf:

allow-loopback-pinentry 

En voer dan deze opdracht uit :

echo RELOADAGENT | gpg-connect-agent 

Nu kunt u dit uitvoeren zonder wachtwoord te vragen:

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" 

Waar $ 1 de tekst is die moet worden versleuteld, $ 2 de gebruikers-ID en $ 3 het wachtwoord.

Opmerking: ik kan me niet herinneren waarom het werkt, maar het werkt. Als je de details kent, bewerk en voeg hier toe.

Antwoord

voor Ubuntu 18.04 werkte dit voor mij-

versleutelen:

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

ontsleutelen:

gpg some-file.tgz.gpg 

Antwoord

Zelfs ik had hetzelfde probleem, maar geen o f de hier genoemde commandos niet werkten en ik controleerde ook verschillende antwoorden met verschillende commandos, maar niets werkte.

Ik was op Ubuntu 20.04.1 LTS

Na veel head-bashen en op de een of andere manier experimenteren

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

passphrase.txt bestand bevat uw passphrase.txt, obvisuosly.

Hoop dat het zal helpen.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *