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
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
ogecho "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.
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
ogset | grep '^.\{0,9\}PG'
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. >gpg --version
2.x (som i Ubuntu 18.04), skal du hoppe til Xen2050 ' s svar: unix.stackexchange.com/a/415064/237055