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

  • Sunteți sigur că 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 și set | grep '^.\{0,9\}PG'
  • Doar pentru înregistrare, dacă utilizați versiunea veche a GPG, ar trebui să funcționeze (pe Ubuntu și altele, este ' pachetul gnupg1. Cu toate acestea, acestea descurajează utilizarea acesteia, cu excepția cazului în care trebuie.
  • De asemenea, rețineți că în GPG 2.x gpg --list-packets --batch myFile.gpg solicită o frază de acces, în timp ce nu „6a2a593bf0″>

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.

  • Dacă aveți 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 și echo "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.

    Lasă un răspuns

    Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *