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
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
iecho "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.
gpg
uruchamia właściwe polecenie, a nie alias ani opakowanie? Wypróbuj/usr/bin/gpg --passphrase 1234 file.gpg
,type gpg
,gpg --version
iset | grep '^.\{0,9\}PG'
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.gpg --version
2.x (jak w Ubuntu 18.04), przejdź do Xen2050 ' s odpowiedź: unix.stackexchange.com/a/415064/237055