Očekávám, že následující příkaz extrahuje soubor gpg bez požadavku na heslo:

 gpg --passphrase 1234 file.gpg 

Vyžaduje však heslo. Proč?

Toto chování má stejné chování:

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

Používám Ubuntu s gnome 3 a pamatuji si, že to fungovalo ve Fedoře

Komentáře

  • Jste si jisti, že gpg spustíte správný příkaz, nikoli alias ani obálku? Vyzkoušejte /usr/bin/gpg --passphrase 1234 file.gpg, type gpg, gpg --version a set | grep '^.\{0,9\}PG'
  • Pouze pro informaci, pokud používáte starou verzi GPG, mělo by to fungovat (na Ubuntu apod. je to ' balíček gnupg1. Nedoporučuje se jej však používat, pokud to není nutné.
  • Pamatujte také, že v GPG 2.x gpg --list-packets --batch myFile.gpg požaduje přístupovou frázi, zatímco ' t v GPG 1.x. To byl můj problém (v programu, který ' m píšu), zatímco jsem si myslel, že mám váš problém ( –list-packets věc spuštěna jako první, před pokusem o dešifrování, a já jsem si to ' nevšiml). Takže jsem vytvořil nový způsob, jak zjistit, zda byly soubory šifrovány.
  • Pokud máte gpg --version 2.x (jako v Ubuntu 18.04), přejděte na odpověď Xen2050 ': unix.stackexchange.com/a/415064/237055

odpověď

Jsem na stejné lodi (fungovala na Fedoře, ale ne na Ubuntu). Zde je zjevné řešení, které jsem objevil:

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

Vysvětlení: Předání 0 způsobí --passphrase-fd číst ze STDIN, nikoli ze souboru. Pipetováním přístupové fráze tedy --passphrase-fd přijme zadaný řetězec hesla.

Komentáře

  • přidání --batch --yes na výše uvedené pracoval pro mě.
  • Ale pak mám problém, pokud chci šifrovat data, která jsou vedena do gpg, např. echo "encrypt me" | gpg --passphrarse "mypw" -c -o test.gpg. Jak to vyřeším?
  • Zdá se, že s verzí gpg pro Ubuntu echo "encrypt me" | gpg --passphrase "mypassphrase" --batch --quiet --yes --no-use-agent -c -o encrypted.gpg funguje.
  • I ' m Inappropriate ioctl for device sem a bez --batch sem (na gpg (GnuPG) 2.1.18).
  • @RyanGriggs Nemyslím si to. echo "hello" | cat a echo "hello"| cat oba poskytují stejný řetězec.

Odpověď

Aktualizováno 4. 12. 2017. (Přidání –batch, aby se zabránilo výzvě k zadání hesla)

Možná budete muset přidat možnost --batch:

A. používáte pár klíčů příjemce , možná budete muset přidat --pinentry-mode loopback.

Z verze 2 GPG je nutná možnost --batch, která zajistí, že se nezobrazí žádná výzva … Ok, vypadá to:

$ 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 

Zkuste:

$ 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 

zní to dobře! No, teď:

$ 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 

Zatímco není zadán žádný parametr -d (stejná syntaxe jako otázka SO), dešifrované údaje z file.gpg budou extrahovány do nového 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 

Funguje to dobře!

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

Pro klíčový soubor příjemce :

Vytvoření prvního čistého tempa

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. 

Nyní

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] 

Pak lze jako alias klíče použít posledních 8 znaků z otisku hospody.

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

Ok, hned!

seq -f %\"8g 990 5 1015 | gpg --batch --armor --recipient AFABDEDF --encrypt --output file.gpg 

nebo

seq -f %\"8g 990 5 1015 | gpg --batch -aer 43E6B96CAFABDEDF -o file.gpg 

Poskytne:

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

Poté

gpg --decrypt --pinentry-mode loopback --passphrase-file password.txt --batch file.gpg 

nebo

gpg -d --pinentry-mode loopback --passphrase-file password.txt --batch file.gpg 

vykreslí:

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 

Komentáře

  • Nezobrazuje se vám varování " gpg: gpg-agent není k dispozici v této relaci " takže pravděpodobně máte přístupovou frázi uloženou možná v agentovi?
  • @AsfandYarQazi Ne, přístupová fráze je zadána v příkazovém řádku.
  • Tato odpověď fungovala pro mě. Ubuntu s gpg 1.4.16. Parametr --passphrase funguje pro dávkové operace a nevyzývá ' k zadání hesla.
  • Toto může zdá se pracovat, protože nepříjemný agent gpg ukládá přístupovou frázi do mezipaměti. Zkuste restartovat systém úplně a začít znovu, nebo zadat špatně –passphrase 5678 (špatné heslo).
  • Viz nižší odpověď. Klíč je --pinentry-mode loopback. Funguje to!

Odpověď

Pro gpg verze 2.x nemusíte používat --batch, pouze

--pinentry-mode loopback 

pracuje s --passphrase & --passphrase-file a umožní vám zadat nové informace, například v případě konfliktů názvů souborů:

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

na rozdíl od --batch, které rychle selžou, řekne ...failed: File exists

(testováno na Debian Stable / Stretch „s gpg 2.1.18. Toto chování při ignorování důležitých --passphrase možností by mělo být chybou, pokud již není)

Komentáře

  • Toto funguje dobře i na Ubuntu 18.04 Bionic s gpg (GnuPG) 2.2.4
  • Toto funguje na MacOS po instalaci gpg s homebrew
  • Toto funguje pro mě cat your-passphrase-file.txt | gpg --pinentry-mode loopback --passphrase-fd 0 --sign your-file-to-sign.txt
  • Děkuji, funguje to také pro dešifrování

Odpověď

Zní to, jako byste používali gpg2. Musíte také vložit možnost --batch. (Pokud plánujete přidat toto do skriptu, budete také chtít přidat --no-tty a pravděpodobně --yes.)

Komentáře

  • Je ' s 1.4. použití –batch nemá žádný účinek.
  • Omlouvám se, pak @Nima. Nevím ' nevím, co ti mám říct. S GnuPG v1.4 byste neměli ' pro předání přístupové fráze s žádnou z těchto možností dělat cokoli jiného.
  • Dobrá poznámka, @rsaw, pomohl zabraňuji výzvám k zadání hesla (a o něco méně elegantní možnost echo / STDIN).
  • –batch pomohl i v systému Windows. woo hoo.

Odpověď

pro mě přidání „–no-use-agent“ to vyřešilo pro „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 

Odpověď

Pokud pomocí gpg (GnuPG) 2.2.7 Podle manuálové stránky

–passphrase-fd n

Číst přístupovou frázi z deskriptor souboru č. Pouze první řádek bude přečten z deskriptoru souboru n. Pokud použijete 0 pro n, přístupová fráze se načte ze STDIN. Toto lze použít, pouze pokud je zadána pouze jedna přístupová fráze.

– soubor se souborem passphrase

Přečtěte si přístupovou frázi ze souboru. Ze souboru se načte pouze první řádek. To lze použít, pouze pokud je zadána pouze jedna přístupová fráze. Je zřejmé, že přístupová fráze uložená v souboru má pochybné zabezpečení, pokud si tento soubor mohou přečíst ostatní uživatelé. Tuto možnost nepoužívejte, pokud se jí můžete vyhnout.

– řetězec passphrase

Jako přístupovou frázi použijte řetězec. Lze ji použít, pouze pokud je zadána pouze jedna přístupová fráze. Je zřejmé, že toto je velmi pochybné zabezpečení v systému pro více uživatelů. Nepoužívejte tuto možnost, pokud se jí můžete vyhnout.

přidat --pinentry-mode loopback aby fungoval

Upozorňujeme, že od verze 2.0 se tato přístupová fráze používá pouze v případě, že byla zadána také volba –batch . Od verze 2.1 je třeba –pinentry-mode také nastavit zpětnou smyčku.

Například:

gpg --batch --yes --passphrase="pw" --pinentry-mode loopback -o out -d in 

Komentáře

  • Jsou --batch a --pinentry-mode loopback možnosti potřebné pro fungování jakékoli –passphrase … možnosti? Ve v.2.1.18 říká informační stránka to samé (ale ne manuálová stránka) o dávkovém & pinentry, ale stále funguje pouze s –pinentry … Pokud obojí pro v.2.2.7 jsou opravdu potřeba, pak se věci stávají směšnými, vývojáři zavádějí vážné chyby záměrně

Answer

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 

Odpověď

Pro mě to fungovalo jako kouzlo:

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

Komentáře

  • chyba: gpg: no valid OpenPGP data found. gpg: processing message failed: eof. Máte nějaké nápady?

Odpověď

zkusili jste to:

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

Zdroj: Zde

Odpovědět

Jak již bylo zmíněno v manuálu gpg, lze použít následující možnost

– režim špičkového režimu Nastavte režim pinentry na režim. Povolené hodnoty pro režim jsou:

 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. 

Výchozí chování gpg je tedy vyzvat uživatele k zadání hesla, pokud změníte tento režim agenta uživatele na „–pinentry-mode“ loopback „Funguje to naprosto dobře. kompletní příkaz

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

odpověď

Myslím, že je to docela bezpečná metoda heslo do příkazového řádku je toto:

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

Co to udělá, je vytvořit příkaz „echo“ a předat deskriptor souboru jako název cesty k gpg (např. / dev / fd / 63). gpg odtud přečte klíč. Mezitím by měl příkaz echo běžet paralelně a měl by se dokončit okamžitě a ponechat klávesu ve vyrovnávací paměti fd.

Výhody jsou:

  • Příkaz gpg nebude mít na svém příkazovém řádku heslo
  • Echo bude krátkodobé. Ve skutečnosti by to mělo být téměř okamžité
  • Heslo se na disku nikdy nenachází, nebude existovat soubor, který by měl být smazán, a pokud bude příkaz přerušen, nezůstanou žádné zbytky

Odpověď

Nebudete mi věřit, když vám řeknu, že na ubuntu se gpg pokusí požádat o heslo, pokud je nastaven $ DISPLAY a pokud jej zrušíte, vezme jej z příkazového řádku –password. Funguje to podle očekávání:

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

Myslím, že jen další příklad nadměrného inženýrství.

Odpovědět

Zde je odkaz na stackoverflow odpověď, že možná další pomoci; mám projekt, který provádí hromadné dešifrování / šifrování, a vzhledem k tomu, že GnuPG je velmi přísný ohledně přístupových frází, se tvrdě naučil, že --passphrase funguje jen výjimečně. možnost --passphrase-fd je spolehlivější.

Tento skript dělá správným použití možnosti --passphrase -fd a bylo testováno veřejně prostřednictvím Travis-CI , kde najdete její protokoly v akci.

Teď nebudu jen posílat odkazy na odpověď, aniž bych zde poskytl nějaký ukázkový kód, takže zde je aktualizovaný „samostatný“ skript, se kterým si můžete zahrát:

#!/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}>&- 

Zatímco výše uvedené není tak fantazijní jako li nked protect na GitHubu by měl být ještě funkčnější než odpověď spojená na začátku tohoto příspěvku.

Happy hacking.

odpověď

Jedna jednoduchá metoda, kterou jsem našel při práci na stroji s Linuxem, je: 1) klíč importu do gpg: => shell> gpg —import private_key.key

2) dešifrování udávající název souboru: => shell> gpg —output -d

2.1) Po zadání výše uvedeného příkazu budete vyzváni k zadání parafráze. Zadejte parafrázi a dešifruje soubor gpg.

Odpovědět

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

Komentáře

  • bylo by hezké, kdybyste mohli vysvětlit, proč by to mělo problém vyřešit
  • Zatímco tento fragment kódu může vyřešit otázku, včetně vysvětlení opravdu pomáhá zlepšit kvalitu vašeho příspěvku. Nezapomeňte, že v budoucnu odpovídáte na otázku pro čtenáře, nejen na osobu, která se ptá nyní! Upravte svou odpověď a přidejte vysvětlení a uveďte, jaká omezení a předpoklady platí.

Odpověď

Umístěte na konec ~/.gnupg/gpg.conf:

use-agent pinentry-mode loopback 

Vložte na konec (možná nového) souboru ~/.gnupg/gpg-agent.conf:

allow-loopback-pinentry 

A poté spusťte tento příkaz :

echo RELOADAGENT | gpg-connect-agent 

Nyní jej můžete spustit bez zadání hesla:

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" 

Kde $ 1 je text, který se má zašifrovat, $ 2 je ID uživatele a $ 3 heslo.

Poznámka: Nemůžu si vzpomenout, proč to funguje, ale funguje to. Pokud znáte podrobnosti, prosím upravte a vložte sem.

Odpověď

pro Ubuntu 18.04 to fungovalo pro mě-

šifrování:

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

dešifrovat:

gpg some-file.tgz.gpg 

odpověď

I já jsem čelil stejnému problému, ale žádný o f zde zmíněné příkazy nefungovaly a také jsem zkontroloval různé odpovědi pomocí různých příkazů, ale nic nefungovalo.

Byl jsem na Ubuntu 20.04.1 LTS

Po mnoha pokusech o napadení hlavy a nějakém experimentování

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

passphrase.txt obsahuje váš passphrase.txt, obvisuosly.

Doufám, že vám to pomůže.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *