Jeg forventer at følgende kommando skal trekke ut gpg-filen uten å be om passord:

 gpg --passphrase 1234 file.gpg 

Men den ber om passordet. Hvorfor?

Dette har også samme oppførsel:

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

Jeg bruker Ubuntu med gnome 3, og husk at det fungerte i Fedora

Kommentarer

  • Er du sikker på at gpg kjører riktig kommando, ikke et alias eller en wrapper? Prøv /usr/bin/gpg --passphrase 1234 file.gpg, type gpg, gpg --version og set | grep '^.\{0,9\}PG'
  • Bare for ordens skyld, hvis du bruker den gamle versjonen av GPG, skal den fungere (på Ubuntu og slikt, ' er gnupg1-pakken. De fraråder imidlertid å bruke den med mindre du må.
  • Vær også oppmerksom på at i GPG 2.x ber gpg --list-packets --batch myFile.gpg om en passfrase, mens den ikke ' t i GPG 1.x. Det var problemet mitt (i et program som jeg ' skriver), mens jeg trodde jeg hadde problemet ditt ( –list-packets ting ble utført først, før jeg prøvde å dekryptere, og jeg la ikke merke til '). Så jeg gjorde en ny måte å finne ut om filene var kryptert.
  • Hvis du har gpg --version 2.x (som i Ubuntu 18.04), hopp til Xen2050 ' s svar: unix.stackexchange.com/a/415064/237055

Svar

Jeg er i nøyaktig samme båt (den fungerte på Fedora, men ikke Ubuntu). Her er et tilsynelatende arbeid rundt jeg oppdaget:

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

Forklaring: Å sende 0 forårsaker --passphrase-fd for å lese fra STDIN i stedet for fra en fil. Så hvis passordfrasen røres, vil --passphrase-fd godta den angitte passordstrengen.

Kommentarer

  • legge til --batch --yes til det ovennevnte fungerte for meg.
  • Men så får jeg et problem, hvis jeg vil kryptere data som ledes til gpg, f.eks. echo "encrypt me" | gpg --passphrarse "mypw" -c -o test.gpg. Hvordan løser jeg dette?
  • Vel, med Ubuntu-versjonen av gpg ser det ut til at echo "encrypt me" | gpg --passphrase "mypassphrase" --batch --quiet --yes --no-use-agent -c -o encrypted.gpg fungerer.
  • I ' m får Inappropriate ioctl for device med og uten --batch her (på gpg (GnuPG) 2.1.18).
  • @RyanGriggs Jeg tror ikke det. echo "hello" | cat og echo "hello"| cat gir begge samme streng.

Svar

Oppgradert 04.12.2017. (Legge til –batch for å forhindre passordfrase)

Det kan hende du må legge til --batch alternativ:

Og. bruker du mottaker nøkkelpar må du kanskje legge til --pinentry-mode loopback også.

Fra versjon 2 av GPG, alternativet --batch er nødvendig for å sikre at du ikke blir spurt … Ok, ser at:

$ 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 

Prøver:

$ 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 

høres bra ut! Vel, nå:

$ 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 ingen -d -parameter er gitt (samme syntaks som SOs spørsmål), dekryptert data fra file.gpg blir ekstrahert 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 bra!

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

For mottakertastefil :

Første rene tempoopprettelse

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

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] 

Da kunne siste 8char fra pub-fingeravtrykk brukes som nøkkelalias.

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

Ok, nå!

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

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

Deretter

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 

gjengis:

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 advarselen " gpg: gpg-agent er ikke tilgjengelig i denne økten " så du har sannsynligvis passordfrasen lagret i agenten, kanskje?
  • @AsfandYarQazi Nei, passordfrasen er angitt i kommandolinjen.
  • Dette svaret fungerte for meg. Ubuntu med gpg 1.4.16. --passphrase -parameteren fungerer for batchoperasjoner, og ' t ber om passord.
  • Dette kan ser ut til å virke fordi den irriterende gpg-agenten cacher passordfrasen. Prøv å starte systemet på nytt helt og starte på nytt, eller skriv inn feil – passordfrase 5678 (feil passordfrase).
  • Se lavere svar. Nøkkelen er --pinentry-mode loopback. Det fungerer!

Svar

For gpg versjon 2.x du trenger ikke å bruke --batch, bare

--pinentry-mode loopback 

fungerer med --passphrase & --passphrase-file, og lar deg legge inn ny info, i tilfelle filnavnkonflikter for eksempel:

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

i motsetning til --batch som raskt vil mislykkes, og sier ...failed: File exists

(testet på Debian Stable / Stretch «s gpg 2.1.18. Denne oppførselen med å ignorere viktige --passphrase -alternativer burde virkelig være en feil hvis den ikke allerede er)

Kommentarer

  • Dette fungerer fint også på Ubuntu 18.04 Bionic med gpg (GnuPG) 2.2.4
  • Dette fungerer på MacOS etter installasjon gpg med hjemmebrygg
  • Dette fungerer for meg cat your-passphrase-file.txt | gpg --pinentry-mode loopback --passphrase-fd 0 --sign your-file-to-sign.txt
  • Takk, det fungerer også for dekryptering også

Svar

Det høres ut som om du bruker gpg2. Du må kaste inn alternativet --batch. (Hvis du planlegger å legge dette til et skript, vil du også legge til --no-tty og sannsynligvis --yes.)

Kommentarer

  • Det ' s 1.4. bruk av –batch har ingen effekt.
  • Beklager da @Nima. Jeg vet ikke ' hva jeg skal fortelle deg. Med GnuPG v1.4 bør du ikke ' ikke trenger å gjøre noe annet for å sende passordfrasen med noen av disse alternativene.
  • God merknad, @rsaw, hjalp meg forhindre passordmeldinger (og litt mindre elegant ekko / STDIN-alternativ).
  • – batch hjalp til og med i Windows. woo hoo.

Svar

for meg, og legger til «–no-use-agent» løste 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 hjelp av gpg (GnuPG) 2.2.7 Ifølge mannssiden,

–passphrase-fd n

Les passordet fra filbeskrivelse n. Bare første linje vil bli lest fra filbeskrivelse n. Hvis du bruker 0 for n, vil passfrasen bli lest fra STDIN. Dette kan bare brukes hvis bare én passordfrase er oppgitt.

– passordfrase-filfil

Les passordfrasen fra filfilen. Bare den første linjen blir lest fra filfilen. Dette kan bare brukes hvis bare én passordfrase er oppgitt. Åpenbart er en passordfrase som er lagret i en fil, tvilsom sikkerhet hvis andre brukere kan lese denne filen. Ikke bruk dette alternativet hvis du kan unngå det.

– passordfråstreng

Bruk streng som passordfrase. Dette kan bare brukes hvis bare en passordfrase er gitt. Åpenbart dette er veldig tvilsomt på et flerbruker-system. Ikke bruk dette alternativet hvis du kan unngå det.

legg til --pinentry-mode loopback for å fungere

Merk at siden versjon 2.0 brukes denne passfrasen bare hvis alternativet –batch også er gitt . Siden versjon 2.1 må –pinentry-modus også settes 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 alternativer som er nødvendige for at –passphrase … alternativet skal fungere? På v.2.1.18 sier informasjonssiden det samme (men ikke mannssiden) om batch & pinentry er nødvendig, men fungerer fremdeles med bare –pinentry … Hvis begge deler virkelig er nødvendig for v.2.2.7 så blir ting latterlig, utviklere introduserer alvorlige feil 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 fungerte som magi for meg:

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

Kommentarer

  • feil: gpg: no valid OpenPGP data found. gpg: processing message failed: eof. Noen ideer?

Svar

har du prøvd å gjøre:

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

Kilde: Her

Svar

Som nevnt i man gpg kan følgende alternativ brukes

–pinentry-mode mode Still pinentry mode til mode. Tillatte verdier for modus 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. 

Standard oppførsel av gpg er å be brukeren om passordfrase, hvis du endrer denne brukeragentmodusen til «–pinentry-mode loopback «Det fungerer helt greit. fullstendig kommando

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

Svar

Jeg tror at en ganske sikker metode å passere passordet til kommandolinjen er dette:

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

Hva dette vil gjøre er å gyte kommandoen «ekko» og sende en filbeskrivelse som et stienavn til gpg (f.eks. / dev / fd / 63). gpg vil da lese nøkkelen derfra. I mellomtiden bør ekkokommandoen løpe parallelt og skal fullføres umiddelbart, og la nøkkelen ligge på bufferen til fd.

Fordelene er:

  • Kommandoen gpg vil ikke ha passordet på kommandolinjen
  • Ekkoet vil være kortvarig. Det burde faktisk være nesten øyeblikkelig
  • Passordet vil aldri ligge på disken, det vil ikke være en fil som skal slettes, og hvis kommandoen blir avbrutt, vil det ikke være noen rester

Svar

Du vil ikke tro meg når jeg forteller deg at på Ubuntu prøver gpg å spørre passordet ditt hvis $ DISPLAY er satt og tar den fra kommandolinjen – passord hvis du fjerner den. Dette fungerer som forventet:

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

Bare nok et eksempel på over engineering antar jeg.

Svar

Her «sa lenke til et stackoverflow svar som kanskje er til hjelp; jeg har en prosjekt som gjør massedekryptering / kryptering, og på grunn av at GnuPG er veldig streng når det gjelder passfraser, lærte vi på den harde måten at --passphrase bare fungerer sjeldne. --passphrase-fd alternativet for å være mer pålitelig.

Dette skriptet gjør ordentlig bruk av alternativet --passphrase -fd, og har blitt testet offentlig via Travis-CI hvor du kan finne logger over det i aksjon.

Nå skal jeg ikke bare legge ut lenker til et svar uten å gi noen eksempler på kode her, så her er det et oppdatert «frittstående» skript du kan spille 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}>&- 

Selv om det ovenstående ikke er så fancy som li nked protect på GitHub det burde være enda mer funksjonelt enn svaret som ble lenket i begynnelsen av dette innlegget.

Happy hacking.

Svar

En enkel metode jeg fant på en Linux-maskin er: 1) importnøkkel til gpg: => shell> gpg —import private_key.key

2) dekrypter og gi utfilnavnet: => skall> gpg — utgang -d

2.1) Å gi kommandoen ovenfor vil be deg om å omskrive. Skriv inn omskrivningen, så dekrypteres gpg-filen.

Svar

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

Kommentarer

  • det ville være fint om du kunne forklare hvorfor dette skulle løse problemet
  • Selv om denne kodebiten kan løse spørsmålet, inkludert en forklaring hjelper virkelig å forbedre kvaliteten på innlegget ditt. Husk at du svarer på spørsmålet til leserne i fremtiden, ikke bare den som spør nå! Vennligst rediger svaret ditt for å legge til forklaring, og gi en indikasjon på hvilke begrensninger og antagelser som gjelder.

Svar

Sett på slutten av ~/.gnupg/gpg.conf:

use-agent pinentry-mode loopback 

Sett på slutten av (kanskje ny) fil ~/.gnupg/gpg-agent.conf:

allow-loopback-pinentry 

Og kjør deretter denne kommandoen :

echo RELOADAGENT | gpg-connect-agent 

Nå kan du kjøre dette uten å spørre om passord:

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 som skal krypteres, er $ 2 bruker-ID og $ 3 passordet.

Merk: Jeg kan ikke huske hvorfor det fungerer, men det fungerer. Hvis du vet detaljene, vennligst rediger og sett inn her.

Svar

for Ubuntu 18.04 dette fungerte for meg-

kryptere:

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

dekryptere:

gpg some-file.tgz.gpg 

Svar

Selv sto jeg overfor det samme problemet. Men ingen o f kommandoene som er nevnt her fungerte ikke, og jeg sjekket også forskjellige svar med forskjellige kommandoer, men ingenting fungerte.

Jeg var på Ubuntu 20.04.1 LTS

Etter mye hodebasking og eksperimentering på en eller annen måte

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

passphrase.txt fil inneholder passordfrasen.txt, uviselig.

Håper det vil hjelpe.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *