Mă aștept ca următoarea comandă să extragă fișierul gpg fără a cere parola:
gpg --passphrase 1234 file.gpg
Dar solicită parola. De ce?
Acest lucru are, de asemenea, același comportament:
gpg --passphrase-file passfile.txt file.gpg
Folosesc Ubuntu cu gnome 3 și amintesc că funcționa în Fedora
Comentarii
t în GPG 1.x. Aceasta a fost problema mea (într-un program pe care ' m scriu), în timp ce credeam că am problema ta ( –list-packets lucru executat mai întâi, înainte de a încerca să decriptați, și nu ' nu am observat). Deci, am făcut o nouă modalitate de a determina dacă fișierele au fost criptate.
gpg --version
2.x (ca în Ubuntu 18.04), treceți la răspunsul Xen2050 ': unix.stackexchange.com/a/415064/237055 Răspuns
Sunt exact în aceeași barcă (a funcționat pe Fedora, dar nu pe Ubuntu). Iată o lucrare aparentă pe care am descoperit-o:
echo your_password | gpg --batch --yes --passphrase-fd 0 your_file.gpg
Explicație: Trecerea 0
cauzează --passphrase-fd
pentru a citi din STDIN mai degrabă decât dintr-un fișier. Deci, prin introducerea expresiei de acces, --passphrase-fd
va accepta șirul de parolă specificat.
Comentarii
- adăugând
--batch --yes
la cele de mai sus a funcționat pentru mine. - Dar apoi am o problemă, dacă vreau să criptez date care sunt canalizate în gpg, de ex.
echo "encrypt me" | gpg --passphrarse "mypw" -c -o test.gpg
. Cum rezolv acest lucru? - Ei bine, cu versiunea Ubuntu a gpg,
echo "encrypt me" | gpg --passphrase "mypassphrase" --batch --quiet --yes --no-use-agent -c -o encrypted.gpg
pare să funcționeze. - I ' m primesc
Inappropriate ioctl for device
cu și fără--batch
aici (pe gpg (GnuPG) 2.1.18). - @RyanGriggs Nu cred.
echo "hello" | cat
șiecho "hello"| cat
ambele produc același șir.
Răspuns
Actualizat 04.04.2017. (Adăugarea –batch pentru a preveni solicitarea expresiei de acces)
Este posibil să fie necesar să adăugați opțiunea --batch
:
Și. dacă utilizați pereche de chei destinatar , poate fi necesar să adăugați și --pinentry-mode loopback
.
Din versiunea 2 a GPG
, opțiunea --batch
este necesară pentru a se asigura că nu există prompt … Ok, căutând că:
$ 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
Încercare:
$ 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
sună bine! Ei bine, acum:
$ 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
În timp ce nu este dat parametrul -d
(aceeași sintaxă ca întrebarea SO), datele decriptate din file.gpg
vor fi extrase într-un nou 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
Acest lucru funcționează bine!
$ cd - $ rm -fR $newdir $ unset newdir
Pentru fișier cheie destinatar :
Prima creare a tempo-ului curat
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.
Atunci acum
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]
Apoi, ultimul 8char de la amprenta pubului ar putea fi folosit ca alias cheie.
gpg -k [email protected]| sed -e "/^pub/{N;s/.*\(.\{16\}\)/\1/;p;s/^.\{8\}//;q};d" 43E6B96CAFABDEDF AFABDEDF
Ok, acum!
seq -f %\"8g 990 5 1015 | gpg --batch --armor --recipient AFABDEDF --encrypt --output file.gpg
sau
seq -f %\"8g 990 5 1015 | gpg --batch -aer 43E6B96CAFABDEDF -o file.gpg
Va da:
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-----
Apoi
gpg --decrypt --pinentry-mode loopback --passphrase-file password.txt --batch file.gpg
sau
gpg -d --pinentry-mode loopback --passphrase-file password.txt --batch file.gpg
va reda:
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
Comentarii
- Nu primiți avertismentul " gpg: gpg-agent nu este disponibil în această sesiune " deci probabil aveți fraza de acces stocată în agent, poate?
- @AsfandYarQazi Nu, expresia de acces este introdusă în linia de comandă.
- Acest răspuns a funcționat pentru mine. Ubuntu cu gpg 1.4.16. Parametrul
--passphrase
funcționează pentru operațiile de lot și nu ' solicită o parolă. - Acest lucru poate apar pentru a funcționa, deoarece agentul gpg enervant ascunde fraza de acces în cache. Încercați să reporniți complet sistemul și să începeți din nou, sau să introduceți greșit – passphrase 5678 (fraza de acces greșită).
- Vedeți răspunsul inferior. Cheia este
--pinentry-mode loopback
. Funcționează!
Răspuns
Pentru gpg versiunea 2.x nu trebuie să utilizați --batch
, doar
--pinentry-mode loopback
funcționează cu --passphrase
& --passphrase-file
și vă va permite să introduceți informații noi, în caz de conflict de nume de fișier, de exemplu:
gpg --pinentry-mode loopback --passphrase-file=file encrypted.gpg ... File "encrypted" exists. Overwrite? (y/N)n Enter new filename: f2
spre deosebire de --batch
care va eșua rapid, spunând ...failed: File exists
(testat pe Debian Stable / Stretch „s gpg 2.1.18. Acest comportament de ignorare a opțiunilor importante --passphrase
ar trebui să fie într-adevăr o eroare, dacă nu este deja)
Comentarii
- Acest lucru funcționează frumos și pe Ubuntu 18.04 Bionic cu gpg (GnuPG) 2.2.4
- Acest lucru funcționează pe MacOS după instalare gpg cu homebrew
- Acest lucru funcționează pentru mine
cat your-passphrase-file.txt | gpg --pinentry-mode loopback --passphrase-fd 0 --sign your-file-to-sign.txt
- Vă mulțumim, funcționează și pentru decriptare
Răspuns
Sună de parcă ai folosi gpg2. Trebuie să introduceți și opțiunea --batch
. (Dacă intenționați să adăugați acest lucru la un script, veți dori să adăugați și --no-tty
și probabil --yes
.)
Comentarii
- Este ' s 1.4. utilizarea –batch nu are efect.
- Ne pare rău, atunci @Nima. Nu ' nu știu ce să vă spun. Cu GnuPG v1.4 nu ar trebui să ' nu trebuie să faceți nimic altceva pentru a transmite fraza de acces cu oricare dintre aceste opțiuni.
- Notă bună, @rsaw, ajutat previn solicitările de parolă (și opțiunea de ecou / STDIN puțin mai elegantă).
- –batch a ajutat chiar și în Windows. woo hoo.
Răspuns
pentru mine, adăugând „–no-use-agent” a rezolvat acest lucru pentru „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
Răspuns
Dacă folosind gpg (GnuPG) 2.2.7 Conform paginii man,
–passphrase-fd n
Citiți fraza de acces din descriptor de fișiere n. Doar primul rând va fi citit din descriptorul de fișier n. Dacă utilizați 0 pentru n, expresia de acces va fi citită din STDIN. Aceasta poate fi utilizată numai dacă este furnizată o singură frază de acces.
–passphrase-file file
Citiți expresia de acces din fișierul de fișier. Doar primul rând va fi citit din fișierul fișier. Aceasta poate fi utilizată numai dacă este furnizată o singură frază de acces. Evident, o expresie de acces stocată într-un fișier este de siguranță discutabilă dacă alți utilizatori pot citi acest fișier. Nu utilizați această opțiune dacă o puteți evita.
–passphrase string
Utilizați șirul ca frază de acces. Aceasta poate fi utilizată numai dacă este furnizată o singură frază de acces. Evident, aceasta este o securitate foarte discutabilă pe un sistem multi-utilizator. Nu utilizați această opțiune dacă o puteți evita.
adăugați --pinentry-mode loopback
pentru a funcționa
Rețineți că de la versiunea 2.0 această expresie de acces este utilizată numai dacă a fost dată și opțiunea –batch . De la versiunea 2.1, modul –pinentry trebuie, de asemenea, să fie setat la loopback.
De exemplu:
gpg --batch --yes --passphrase="pw" --pinentry-mode loopback -o out -d in
Comentarii
- Sunt atât
--batch
, cât și--pinentry-mode loopback
opțiuni necesare pentru ca orice opțiune –passphrase … să funcționeze? În v.2.1.18, pagina cu informații spune același lucru (dar nu și pagina manuală) despre lotul & este necesar pinentry, dar funcționează în continuare doar cu –pinentry … Dacă ambele sunt într-adevăr necesare pentru v.2.2.7, atunci lucrurile devin ridicole, dezvoltatorii introduc intenționat erori serioase
Răspunde
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
Răspuns
A funcționat ca magie pentru mine:
echo "YOUR_PASS_PHRASE" | gpg --batch --yes --passphrase-fd 0 /home/somewhere/your_file.pgp
Comentarii
- eroare:
gpg: no valid OpenPGP data found. gpg: processing message failed: eof
. Ai vreo idee?
Răspunde
ai încercat să faci:
gpg --batch --passphrase-fd 0 --decrypt-files *.gpg gpg --passphrase-fd 0 1234 file.gpg
Sursă: Aici
Răspuns
După cum sa menționat în man gpg, se poate utiliza următoarea opțiune
–pinentry-mode mode Setați modul pinentry la modul. Valorile permise pentru mod sunt:
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.
Prin urmare, comportamentul implicit al gpg este de a solicita utilizatorului expresia de acces, dacă schimbați acest mod agent utilizator în „–pinentry-mode loopback „Funcționează perfect. comanda completă
gpg --pinentry-mode loopback --passphrase <passphrase> -d <file to decrypt>
Răspuns
Cred că o metodă destul de sigură pentru a trece parola pentru linia de comandă este următoarea:
gpg --passphrase-file <(echo password) --batch --output outfile -c file
Ceea ce va face este să apară comanda „echo” și să treacă un descriptor de fișier ca nume de cale către gpg (de exemplu / dev / fd / 63). gpg va citi apoi cheia de acolo. Între timp, comanda echo ar trebui să ruleze în paralel și ar trebui să se termine instantaneu, lăsând cheia pe buffer-ul fd-ului.
Beneficiile sunt:
- Comanda gpg nu va avea parola pe linia sa de comandă
- Ecoul va fi de scurtă durată. De fapt, ar trebui să fie aproape instantaneu
- Parola nu va locui niciodată pe disc, nu va fi un fișier care să fie șters și dacă comanda este întreruptă nu vor mai rămâne resturi
Răspuns
Nu mă vei crede când îți spun că pe ubuntu gpg încearcă să îți ceară parola dacă este setat $ DISPLAY și îl ia de la linia de comandă – parolă dacă îl anulați. Acest lucru funcționează așa cum era de așteptat:
DISPLAY= gpg --symmetric --passphrase pass --batch
Cred că doar un alt exemplu de inginerie excesivă.
Răspuns
Aici „este link la un răspuns stackoverflow care poate fi de ajutor suplimentar; am un proiect care face decriptare / criptare în bloc și, datorită faptului că GnuPG este foarte strict în ceea ce privește frazele de acces, a învățat modul greu în care --passphrase
funcționează numai în ocazii rare. opțiunea --passphrase-fd
pentru a fi mai fiabil.
Acest script face corect utilizarea opțiunii --passphrase -fd
și a fost testată public prin Travis-CI , unde puteți găsi jurnale ale acesteia în acțiune.
Acum nu voi posta doar linkuri către un răspuns fără a furniza un exemplu de cod aici, așa că aici este un script „stand alone” actualizat cu care puteți juca:
#!/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}>&-
În timp ce cele de mai sus nu sunt la fel de fanteziste ca li nked protect la GitHub, ar trebui să fie chiar mai funcțional decât răspunsul legat la începutul acestei postări.
Happy hacking.
Răspuns
O metodă simplă pe care am găsit-o că funcționează pe o mașină Linux este: 1) import cheie în gpg: => shell> gpg —import private_key.key
2) decriptați dând numele fișierului: => shell> gpg —output -d
2.1) Comanda dând mai sus vă va cere să introduceți parafrază. Introduceți parafraza și va decripta fișierul gpg.
Răspuns
gpg2 -se --passphrase yourpassword --batch --yes -r [email protected] filename
Comentarii
- ar fi bine dacă ați putea explica de ce acest lucru ar trebui să rezolve problema
- În timp ce acest fragment de cod poate rezolva întrebarea, inclusiv o explicație ajută cu adevărat la îmbunătățirea calității postării dvs. Amintiți-vă că răspundeți la întrebare pentru cititori în viitor, nu doar pentru persoana care pune acum! Vă rugăm să editați răspunsul dvs. pentru a adăuga explicații și să indicați limitările și ipotezele care se aplică.
Răspunde
Pune la sfârșitul ~/.gnupg/gpg.conf
:
use-agent pinentry-mode loopback
Puneți la sfârșitul fișierului (poate nou) ~/.gnupg/gpg-agent.conf
:
allow-loopback-pinentry
Și apoi executați această comandă :
echo RELOADAGENT | gpg-connect-agent
Acum puteți rula acest lucru fără a cere parola:
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"
În cazul în care $ 1 este textul care trebuie criptat, $ 2 este ID-ul utilizatorului și $ 3 parola.
Notă: Nu-mi pot aminti de ce funcționează, dar funcționează. Dacă știți detaliile, vă rugăm să editați și să inserați aici.
Răspuns
pentru Ubuntu 18.04 acest lucru a funcționat pentru mine-
criptare:
pass="123" gpg -c --batch --passphrase "$pass" some-file.tgz
decriptare:
gpg some-file.tgz.gpg
Răspuns
Chiar și eu mă confruntam cu aceeași problemă. Dar niciunul o f comenzile menționate aici nu au funcționat și am verificat și răspunsuri diferite cu comenzi diferite, dar nimic nu a funcționat.
Am fost pe Ubuntu 20.04.1 LTS
După multă bătaie de cap și experimentat cumva acest fișier
gpg --pinentry-mode loopback --passphrase-file=passphrase.txt --decrypt-files my-encrypted-gpg-file.gpg
passphrase.txt
conține pasphrase.txt, în mod evident.
Sper că vă va ajuta.
gpg
executați comanda potrivită, nu un alias și nici un wrapper? Încercați/usr/bin/gpg --passphrase 1234 file.gpg
,type gpg
,gpg --version
șiset | grep '^.\{0,9\}PG'
gpg --list-packets --batch myFile.gpg
solicită o frază de acces, în timp ce nu „6a2a593bf0″>