Jeg forventer, at følgende kommando udpakker gpg-filen uden at bede om adgangskode:

 gpg --passphrase 1234 file.gpg 

Men det beder om adgangskoden. Hvorfor?

Dette har også den samme adfærd:

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

Jeg bruger Ubuntu sammen med gnome 3, og husk at det fungerede i Fedora

Kommentarer

  • Er du sikker på, at gpg kører den rigtige kommando, ikke et alias eller en indpakning? Prøv /usr/bin/gpg --passphrase 1234 file.gpg, type gpg, gpg --version og set | grep '^.\{0,9\}PG'
  • Bare for at registrere det, hvis du bruger den gamle version af GPG, skal det fungere (på Ubuntu og sådan, det ' er gnupg1-pakken. De fraråder dog at bruge det, medmindre du skal.
  • Bemærk også, at i GPG 2.x beder gpg --list-packets --batch myFile.gpg om en adgangssætning, mens den ikke ' t i GPG 1.x. Det var mit problem (i et program, som jeg ' skriver), mens jeg troede, at jeg havde dit problem ( –list-pakker ting udført først, før jeg forsøgte at dekryptere, og jeg bemærkede ikke '). Så jeg lavede en ny måde at afgøre, om filer var krypteret. >
  • Hvis du har gpg --version 2.x (som i Ubuntu 18.04), skal du hoppe til Xen2050 ' s svar: unix.stackexchange.com/a/415064/237055

Svar

Jeg er i nøjagtigt den samme båd (det fungerede på Fedora men ikke Ubuntu). Her er et tilsyneladende arbejde omkring jeg opdagede:

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

Forklaring: At give 0 forårsager --passphrase-fd for at læse fra STDIN snarere end fra en fil. Så ved at gennemføre adgangssætningen --passphrase-fd til at acceptere din angivne adgangskodestreng.

Kommentarer

  • tilføj --batch --yes til ovenstående fungerede for mig.
  • Men så får jeg et problem, hvis jeg vil kryptere data, der ledes til gpg, f.eks. echo "encrypt me" | gpg --passphrarse "mypw" -c -o test.gpg. Hvordan løser jeg dette?
  • Nå, med Ubuntu-versionen af gpg synes echo "encrypt me" | gpg --passphrase "mypassphrase" --batch --quiet --yes --no-use-agent -c -o encrypted.gpg at virke.
  • I ' m får Inappropriate ioctl for device med og uden --batch her (på gpg (GnuPG) 2.1.18).
  • @RyanGriggs Jeg tror ikke det. echo "hello" | cat og echo "hello"| cat giver begge den samme streng.

Svar

Opgraderet 04-12-2017. (Tilføjelse –batch for at forhindre adgangskode-prompt)

Det kan være nødvendigt at tilføje --batch mulighed:

Og. bruger du modtagernøglepar skal du muligvis tilføje --pinentry-mode loopback.

Fra version 2 af GPG, indstillingen --batch er nødvendig for at sikre ingen prompt … Ok, ser ud til:

$ 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 

Forsøger:

$ 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 

lyder godt! Nå, 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 

Mens der ikke er angivet nogen -d -parameter (samme syntaks som SOs spørgsmål), dekrypterede data fra file.gpg ekstraheres til 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 

Dette fungerer godt!

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

Til modtagerens nøglefil :

Første rene tempo oprettelse

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. 

Så 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] 

Derefter kunne sidste 8char fra pub-fingeraftryk bruges som nøglealias.

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 

Vil give:

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

Derefter

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 

gengives:

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 ikke advarslen " gpg: gpg-agent er ikke tilgængelig i denne session " så du sandsynligvis har adgangssætningen gemt i agenten, måske?
  • @AsfandYarQazi Nej, adgangssætningen indtastes i kommandolinjen.
  • Dette svar fungerede for mig. Ubuntu med gpg 1.4.16. --passphrase -parameteren fungerer til batchoperationer og ' t beder om en adgangskode.
  • Dette kan synes at virke, fordi den irriterende gpg-agent cachelagrer adgangskoden. Prøv at genstarte systemet fuldstændigt og starte nyt, eller indtast forkert – adgangskode 5678 (forkert adgangskode).
  • Se lavere svar. Nøglen er --pinentry-mode loopback. Det fungerer!

Svar

For gpg version 2.x du behøver ikke bruge --batch, bare

--pinentry-mode loopback 

fungerer med --passphrase & --passphrase-file, og giver dig mulighed for at indtaste nye oplysninger i tilfælde af filnavnkonflikter for eksempel:

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

i modsætning til --batch der hurtigt mislykkes og siger ...failed: File exists

(testet på Debian Stable / Stretch “s gpg 2.1.18. Denne adfærd ved at ignorere vigtige --passphrase muligheder burde virkelig være en fejl, hvis den ikke allerede er t)

Kommentarer

  • Dette fungerer pænt også på Ubuntu 18.04 Bionic med gpg (GnuPG) 2.2.4
  • Dette fungerer på MacOS efter installation gpg med homebrew
  • Dette fungerer for mig cat your-passphrase-file.txt | gpg --pinentry-mode loopback --passphrase-fd 0 --sign your-file-to-sign.txt
  • Tak, det fungerer også til dekryptering

Svar

Det lyder som om, du bruger gpg2. Du skal også kaste indstillingen --batch. (Hvis du planlægger at føje dette til et script, vil du også føje til --no-tty og sandsynligvis --yes.)

Kommentarer

  • Det ' s 1.4. brug af –batch har ingen effekt.
  • Beklager så @Nima. Jeg ved ikke ' hvad jeg skal fortælle dig. Med GnuPG v1.4 skal du ikke ' behøver ikke at gøre noget andet for at videregive adgangssætningen med en af disse muligheder.
  • God note, @rsaw, hjalp mig forhindrer adgangskodeanmodninger (og lidt mindre elegant ekko / STDIN-mulighed).
  • – batch hjalp selv i windows. woo hoo.

Svar

for mig ved at tilføje “–no-use-agent” løst dette for “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

Hvis ved hjælp af gpg (GnuPG) 2.2.7 Ifølge mandsiden

–passphrase-fd n

Læs adgangsfrasen fra filbeskrivelse n. Kun den første linje læses fra filbeskrivelsen n. Hvis du bruger 0 til n, læses adgangssætningen fra STDIN. Dette kan kun bruges, hvis der kun leveres en adgangskode.

– adgangskode-filfil

Læs adgangskoden fra filfilen. Kun den første linje læses fra filfilen. Dette kan kun bruges, hvis der kun leveres en adgangssætning. Det er åbenbart, at en adgangssætning, der er gemt i en fil, er tvivlsom, hvis andre brugere kan læse denne fil. Brug ikke denne mulighed, hvis du kan undgå det.

– adgangskode streng

Brug streng som adgangssætning. Dette kan kun bruges, hvis der kun leveres en adgangskode. Åbenbart, dette er af meget tvivlsom sikkerhed på et flerbruger-system. Brug ikke denne mulighed, hvis du kan undgå det.

tilføj --pinentry-mode loopback for at fungere

Bemærk, at siden version 2.0 bruges denne adgangssætning kun, hvis indstillingen –batch også er givet . Siden version 2.1 skal –pinentry-mode også indstilles til loopback.

For eksempel:

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

Kommentarer

  • Er både --batch og --pinentry-mode loopback nødvendige indstillinger for enhver –passphrase … mulighed for at arbejde? På v.2.1.18 siger infosiden det samme (men ikke mandsiden) om batch & pinentry er nødvendigt, men fungerer stadig kun med –pinentry … Hvis begge der er virkelig brug for v.2.2.7 så bliver tingene latterlige, udviklere introducerer alvorlige fejl med vilje

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 fungerede som en magi for mig:

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

Kommentarer

  • fejl: gpg: no valid OpenPGP data found. gpg: processing message failed: eof. Har du nogen ideer?

Svar

har du prøvet at gøre:

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

Kilde: Her

Svar

Som nævnt i man gpg kan følgende indstilling bruges

–pinentry-mode mode Indstil pinentry mode til mode. Tilladte værdier for tilstand er:

 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åledes er gpgs standardadfærd at bede brugeren om adgangskode, hvis denne brugeragenttilstand ændres til “–pinentry-mode loopback “Det fungerer helt fint. komplet kommando

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

Svar

Jeg synes, at en ganske sikker metode til at videregive adgangskoden til kommandolinjen er denne:

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

Hvad dette vil gøre er at gyde kommandoen “ekko” og sende en filbeskrivelse som et stienavn til gpg (f.eks. / dev / fd / 63). gpg læser derefter nøglen derfra. I mellemtiden skal ekkokommandoen køre parallelt og afslutte med det samme og efterlade nøglen på bufferen på fd.

Fordelene er:

  • Kommandoen gpg har ikke adgangskoden på kommandolinjen
  • Ekkoet er kortvarigt. Faktisk skal det være næsten øjeblikkeligt
  • Adgangskoden vil aldrig opholde sig på disken, der vil ikke være en fil, der skal slettes, og hvis kommandoen afbrydes, er der ingen rester

Svar

Du vil ikke tro mig, når jeg fortæller dig, at gpg på ubuntu prøver at spørge dit kodeord, hvis $ DISPLAY er indstillet og tager det fra kommandolinjen – kodeord, hvis du frakobler det. Dette fungerer som forventet:

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

Bare et andet eksempel på over engineering tror jeg.

Svar

Her “sa link til et stackoverflow svar, der måske er til yderligere hjælp; jeg har en projekt, der udfører bulk-dekryptering / kryptering, og på grund af at GnuPG er meget streng med adgangssætninger, lærte den på den hårde måde, at --passphrase kun fungerer sjældent. --passphrase-fd mulighed for at være mere pålidelig.

Dette script gør ordentlig brug af indstillingen --passphrase -fd og er blevet testet offentligt via Travis-CI hvor du kan finde logfiler af den i aktion.

Nu vil jeg ikke bare sende links til et svar uden at give nogle eksempler på kode her, så her er et opdateret “stand alone” script, du kan lege 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}>&- 

Selvom ovenstående ikke er så fancy som li nked protect på GitHub skal det være endnu mere funktionelt end det svar, der er linket i starten af dette indlæg.

Happy hacking.

Svar

En enkel metode, jeg fandt, at jeg arbejdede på en linux-maskine er: 1) importnøgle til gpg: => shell> gpg – import private_key.key

2) dekrypter, hvilket giver outfile-navn: => shell> gpg —output -d

2.1) At give ovenstående kommando vil bede dig om at indtaste omskrivning. Indtast parafrasen, og den dekrypterer gpg-filen.

Svar

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

Kommentarer

  • det ville være rart, hvis du kunne forklare, hvorfor dette skulle løse problemet
  • Mens dette kodestykke muligvis løser spørgsmålet, herunder en forklaring hjælper virkelig med at forbedre kvaliteten af dit indlæg. Husk at du besvarer spørgsmålet til læserne i fremtiden, ikke kun den person, der stiller nu! rediger dit svar for at tilføje forklaring, og giv en indikation af, hvilke begrænsninger og antagelser der gælder.

Svar

Sæt i slutningen af ~/.gnupg/gpg.conf:

use-agent pinentry-mode loopback 

Sæt i slutningen af (måske ny) fil ~/.gnupg/gpg-agent.conf:

allow-loopback-pinentry 

Og kør derefter denne kommando :

echo RELOADAGENT | gpg-connect-agent 

Nu kan du køre dette uden at spørge adgangskode:

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" 

Hvor $ 1 er teksten, der skal krypteres, er $ 2 bruger-idet og $ 3 adgangskoden.

Bemærk: Jeg kan ikke huske, hvorfor det fungerer, men det fungerer. Hvis du kender detaljerne, rediger og indsæt her.

Svar

for Ubuntu 18.04 dette fungerede for mig-

krypter:

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

dekrypter:

gpg some-file.tgz.gpg 

Svar

Selv jeg stod over for det samme problem. Men ingen o f de her nævnte kommandoer fungerede ikke, og jeg tjekkede også forskellige svar med forskellige kommandoer, men intet fungerede.

Jeg var på Ubuntu 20.04.1 LTS

Efter en masse hovedbashing og eksperimenter på en eller anden måde

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

passphrase.txt fil indeholder din adgangsudtryk.txt, tydeligt.

Håber det hjælper.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *