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
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
ogecho "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.
gpg
kjører riktig kommando, ikke et alias eller en wrapper? 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 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.gpg --version
2.x (som i Ubuntu 18.04), hopp til Xen2050 ' s svar: unix.stackexchange.com/a/415064/237055