Oczekuję, że następujące polecenie wyodrębni plik gpg bez pytania o hasło:

 gpg --passphrase 1234 file.gpg 

Ale pyta o hasło. Dlaczego?

To również ma takie samo zachowanie:

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

Używam Ubuntu z gnome 3 i pamiętam, że działało w Fedorze

Komentarze

  • Czy na pewno gpg uruchamia właściwe polecenie, a nie alias ani opakowanie? Wypróbuj /usr/bin/gpg --passphrase 1234 file.gpg, type gpg, gpg --version i set | grep '^.\{0,9\}PG'
  • Dla przypomnienia, jeśli używasz starej wersji GPG, to powinno działać (na Ubuntu i tym podobnych, ' jest pakietem gnupg1). Jednak odradzają używanie go, chyba że musisz.
  • Należy również pamiętać, że w GPG 2.x gpg --list-packets --batch myFile.gpg wyświetla monit o podanie hasła, podczas gdy nie ' t w GPG 1.x. To był mój problem (w programie, w którym piszę '), podczas gdy myślałem, że mam twój problem ( –list-packets wykonywany jako pierwszy, przed próbą odszyfrowania, a nie ' t uwaga). Więc stworzyłem nowy sposób określenia, czy pliki zostały zaszyfrowane.
  • Jeśli masz gpg --version 2.x (jak w Ubuntu 18.04), przejdź do Xen2050 ' s odpowiedź: unix.stackexchange.com/a/415064/237055

Odpowiedź

Jestem na tej samej łodzi (działał w Fedorze, ale nie na Ubuntu). Oto oczywiste obejście, które odkryłem:

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

Wyjaśnienie: przejście 0 powoduje --passphrase-fd, aby czytać ze STDIN zamiast z pliku. Tak więc, podanie hasła potokiem spowoduje, że --passphrase-fd zaakceptuje określony ciąg hasła.

Komentarze

  • dodawanie --batch --yes do powyższego zadziałało.
  • Ale potem pojawia się problem, jeśli chcę zaszyfrować dane przesyłane potokiem do gpg, np. echo "encrypt me" | gpg --passphrarse "mypw" -c -o test.gpg. Jak to rozwiązać?
  • Cóż, w wersji gpg dla Ubuntu echo "encrypt me" | gpg --passphrase "mypassphrase" --batch --quiet --yes --no-use-agent -c -o encrypted.gpg wydaje się działać.
  • I ' m pobieram Inappropriate ioctl for device zi bez --batch tutaj (na gpg (GnuPG) 2.1.18).
  • @RyanGriggs Nie sądzę. echo "hello" | cat i echo "hello"| cat dają ten sam ciąg.

Odpowiedź

Zaktualizowano 04.12.2017. (Dodanie –batch w celu uniknięcia pytania o hasło)

Może być konieczne dodanie opcji --batch:

Oraz. czy używasz pary kluczy odbiorcy , być może trzeba będzie dodać także --pinentry-mode loopback.

Od wersji 2 GPG, opcja --batch jest potrzebna, aby zapewnić brak monitu … Ok, patrzę:

$ 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óbuję:

$ 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 

brzmi dobrze! Cóż, teraz:

$ 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 

Chociaż nie podano parametru -d (ta sama składnia, co pytanie SO), odszyfrowane dane z file.gpg zostaną wyodrębnione do nowego 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 

To działa dobrze!

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

Dla pliku klucza odbiorcy :

Tworzenie pierwszego czystego 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. 

W takim razie teraz

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] 

Następnie ostatnie 8 znaków z odcisku cyfrowego pubu mogłoby zostać użyte jako alias klucza.

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

Ok, teraz!

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

lub

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

Zapewni:

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

Następnie

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

lub

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

wyrenderuje:

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 

Komentarze

  • Nie dostajesz ostrzeżenia " gpg: gpg-agent jest niedostępny w tej sesji ", więc prawdopodobnie masz hasło przechowywane w agencie, być może?
  • @AsfandYarQazi Nie, hasło jest wpisywane w wierszu poleceń.
  • Ta odpowiedź zadziałała dla mnie. Ubuntu z gpg 1.4.16. Parametr --passphrase działa w przypadku operacji zbiorczych i nie ' t monituje o hasło.
  • Może to wydaje się działać, ponieważ irytujący gpg-agent buforuje hasło. Spróbuj całkowicie zrestartować system i zacząć od nowa lub wprowadzić nieprawidłowe –passphrase 5678 (złe hasło).
  • Patrz niższa odpowiedź. Klucz to --pinentry-mode loopback. To działa!

Odpowiedź

Dla gpg w wersji 2.x nie „nie musisz używać --batch, po prostu

--pinentry-mode loopback 

działa z --passphrase & --passphrase-file i pozwoli wprowadzić nowe informacje, na przykład w przypadku konfliktów nazw plików:

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

w przeciwieństwie do --batch, który szybko się nie powiedzie, mówiąc ...failed: File exists

(testowane na Debian Stable / Stretch „s gpg 2.1.18. To zachowanie polegające na ignorowaniu ważnych --passphrase opcji naprawdę powinno być błędem, jeśli jeszcze nie jest)

Komentarze

  • Działa to dobrze również na Ubuntu 18.04 Bionic z gpg (GnuPG) 2.2.4
  • Działa na MacOS po zainstalowaniu gpg with homebrew
  • To działa dla mnie cat your-passphrase-file.txt | gpg --pinentry-mode loopback --passphrase-fd 0 --sign your-file-to-sign.txt
  • Dziękuję, działa również do odszyfrowania

Odpowiedź

Wygląda na to, że „używasz gpg2. Musisz również dorzucić opcję --batch. (Jeśli „planujesz dodać to do skryptu”, będziesz też chciał dodać w --no-tty i prawdopodobnie --yes.)

Komentarze

  • It ' s 1.4. użycie opcji –batch nie daje żadnego efektu.
  • Przepraszamy, @Nima. Nie ' nie wiem, co ci powiedzieć. W GnuPG w wersji 1.4 nie powinieneś ' nie robić nic więcej, aby przekazać hasło za pomocą którejkolwiek z tych opcji.
  • Dobra uwaga, @rsaw, pomogło zapobiegam monitom o hasło (i nieco mniej eleganckiej opcji echo / STDIN).
  • –batch pomógł nawet w oknach. woo hoo.

Odpowiedz

dla mnie, dodanie „–no-use-agent” rozwiązało to dla „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 

Odpowiedź

Jeśli używając gpg (GnuPG) 2.2.7 Zgodnie ze stroną podręcznika,

–passphrase-fd n

Przeczytaj hasło z deskryptor pliku n. Tylko pierwsza linia zostanie odczytana z deskryptora pliku n. Jeśli użyjesz 0 dla n, hasło zostanie odczytane z STDIN. Można tego użyć tylko wtedy, gdy podano tylko jedno hasło.

– plik-plik-passphrase

Odczytuje hasło z pliku plik. Z pliku zostanie odczytana tylko pierwsza linia. Można tego użyć tylko wtedy, gdy podano tylko jedno hasło. Oczywiście hasło przechowywane w pliku ma wątpliwe bezpieczeństwo, jeśli inni użytkownicy mogą odczytać ten plik. Nie używaj tej opcji, jeśli możesz tego uniknąć.

–passphrase string

Użyj łańcucha jako hasła. Można go użyć tylko wtedy, gdy podano tylko jedno hasło. Oczywiście, jest to bardzo wątpliwe bezpieczeństwo w systemie wielu użytkowników. Nie używaj tej opcji, jeśli możesz tego uniknąć.

dodaj --pinentry-mode loopback aby działało

Zauważ, że od wersji 2.0 to hasło jest używane tylko wtedy, gdy podano również opcję –batch . Od wersji 2.1 –pinentry-mode również musi być ustawiony na loopback.

Na przykład:

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

Komentarze

  • Są zarówno --batch, jak i --pinentry-mode loopback potrzebne do działania –passphrase …? W wersji 2.1.18 strona informacyjna mówi to samo (ale nie strona podręcznika) o potrzebnej partii & pinentry, ale nadal działa tylko z opcją –pinentry … Jeśli oba naprawdę są potrzebne w wersji 2.2.7, wtedy sprawy stają się śmieszne, programiści celowo wprowadzają poważne błędy

Odpowiedź

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 

Odpowiedź

U mnie zadziałało jak magia:

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

Komentarze

  • błąd: gpg: no valid OpenPGP data found. gpg: processing message failed: eof. Jakieś pomysły?

Odpowiedź

Czy próbowałeś:

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

Źródło: Tutaj

Odpowiedź

Jak wspomniano w man gpg, można użyć następującej opcji

–pinentry-mode Ustawia tryb pinentry na mode. Dozwolone wartości trybu to:

 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. 

Domyślnym zachowaniem gpg jest monitowanie użytkownika o hasło, jeśli zmienisz ten tryb klienta użytkownika na „–pinentry-mode pętla zwrotna „Działa doskonale. pełne polecenie

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

Odpowiedź

Myślę, że to dość bezpieczna metoda hasło do wiersza poleceń jest takie:

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

To, co zrobi, to wywołanie polecenia „echo” i przekazanie deskryptora pliku jako nazwy ścieżki do gpg (np. / dev / fd / 63). gpg odczyta stamtąd klucz. W międzyczasie polecenie echo powinno działać równolegle i kończyć się natychmiast, pozostawiając klucz w buforze fd.

Korzyści:

  • Polecenie gpg nie będzie miało hasła w swoim wierszu poleceń
  • Echo będzie krótkotrwałe. W rzeczywistości powinno to być prawie natychmiastowe.
  • Hasło nigdy nie będzie przechowywane na dysku, nie będzie pliku do usunięcia, a jeśli polecenie zostanie przerwane, nie będzie żadnych resztek

Odpowiedź

Nie uwierzysz mi, gdy powiem ci, że na ubuntu gpg próbuje zapytać o twoje hasło, jeśli ustawiono $ DISPLAY i pobiera je z wiersza poleceń –password, jeśli je usuniesz. Działa to zgodnie z oczekiwaniami:

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

To chyba kolejny przykład nadmiernej inżynierii.

Odpowiedź

Tutaj „sa link do stackoverflow odpowiedzi, która może być dalszą pomocą; mam projekt, który wykonuje masowe odszyfrowywanie / szyfrowanie, a ponieważ GnuPG jest bardzo rygorystyczny co do haseł, na własnej skórze przekonał się, że --passphrase działa tylko w rzadkich przypadkach. opcja --passphrase-fd, aby była bardziej niezawodna.

Ten skrypt sprawia, że właściwy używają opcji --passphrase -fd i zostało przetestowane publicznie za pośrednictwem Travis-CI , gdzie można znaleźć dzienniki tego działania.

Teraz nie zamierzam po prostu publikować linków do odpowiedzi bez podawania tutaj przykładowego kodu, więc oto zaktualizowany, „samodzielny” skrypt, z którym możesz się bawić:

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

Chociaż powyższe nie jest tak wyszukane jak li nked protect w GitHub, powinno być jeszcze bardziej funkcjonalne niż odpowiedź, do której link znajduje się na początku tego posta.

Miłego hakowania.

Odpowiedź

Jedna prosta metoda, którą znalazłem podczas pracy na komputerze z systemem Linux to: 1) import klucza do gpg: => shell> gpg – import private_key.key

2) deszyfruj podając nazwę pliku wyjściowego: => shell> gpg —output -d

2.1) Podanie powyższej komendy poprosi cię o wpisanie parafrazy. Wprowadź parafrazę, a plik gpg zostanie odszyfrowany.

Odpowiedź

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

Komentarze

  • Byłoby miło, gdybyś mógł wyjaśnić, dlaczego to powinno rozwiązać problem
  • Chociaż ten fragment kodu może rozwiązać problem, łącznie z wyjaśnieniem naprawdę pomaga poprawić jakość Twojego posta. Pamiętaj, że odpowiadasz na pytanie do czytelników w przyszłości, a nie tylko osoba, która zapyta teraz! edytuj swoją odpowiedź, aby dodać wyjaśnienie i wskaż, jakie ograniczenia i założenia mają zastosowanie.

Odpowiedź

Umieść na końcu ~/.gnupg/gpg.conf:

use-agent pinentry-mode loopback 

Umieść na końcu (być może nowego) pliku ~/.gnupg/gpg-agent.conf:

allow-loopback-pinentry 

A następnie uruchom to polecenie :

echo RELOADAGENT | gpg-connect-agent 

Teraz możesz to uruchomić bez pytania o hasło:

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" 

Gdzie $ 1 to tekst do zaszyfrowania, $ 2 to identyfikator użytkownika, a 3 $ to hasło.

Uwaga: Nie pamiętam, dlaczego to działa, ale działa. Jeśli znasz szczegóły, edytuj i wstaw tutaj.

Odpowiedź

dla Ubuntu 18.04 to zadziałało dla mnie-

zaszyfruj:

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

odszyfruj:

gpg some-file.tgz.gpg 

Odpowiedź

Nawet ja miałem ten sam problem. Ale żaden o f wymienione tutaj polecenia nie działały, a także sprawdzałem różne odpowiedzi różnymi poleceniami, ale nic nie działało.

Byłem na Ubuntu 20.04.1 LTS

Po wielu rozbijaniu głowy i eksperymentowaniu w jakiś sposób z tym

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

passphrase.txt plik zawiera twoje hasło.txt, obvisuosly.

Mam nadzieję, że to „pomoże.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *