gpg --passphrase ile bile parola ister


65

Şifreyi sormadan gpg dosyasını çıkartmak için aşağıdaki komutu bekliyorum:

  gpg --passphrase 1234 file.gpg

Ancak şifre soruyor. Neden?

Bu aynı davranışa sahiptir:

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

Gnome 3 ile Ubuntu kullanıyorum ve Fedora’da çalıştığını hatırlıyorum.


1
gpgTakma ad veya paketleyici değil, doğru komutu çalıştırdığınızdan emin misiniz ? Deneyin /usr/bin/gpg --passphrase 1234 file.gpg, type gpg, gpg --versionveset | grep '^.\{0,9\}PG'
F. Hauri

Eğer yoksa Sadece kayıt için Ancak, onlar bunu kullanarak vazgeçirmek Eğer GPG eski sürümünü kullanıyorsanız, bu Ubuntu'da (çalışmalıdır ve bu tür, bu gnupg1 paket için..
Shule

Ayrıca gpg --list-packets --batch myFile.gpgGPG 2.x’te GPG 1.x’te bulunmayan bir parola istediğini unutmayın . Bu benim sorunumdu (yazdığım bir programda), sorunum olduğunu sanıyordum (şifremeyi denemeden önce ilk - list-packets işi yapıldı ve fark etmedim). Bu yüzden, dosyaların şifrelenip şifrelenmediğini belirlemek için yeni bir yol yaptım.
Shule

Yanıtlar:


58

Aynı teknenizdeyim (Fedora'da çalıştı ama Ubuntu'da değil). İşte keşfettim etrafında belli bir çalışma:

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

Açıklama: İletmek, bir dosyadan ziyade STDIN'den okuma 0nedenleri --passphrase-fd. Böylece, parolanın pipo edilmesi --passphrase-fdbelirttiğiniz parola dizesini kabul edecek.


16
--batch --yesYukarıdakilere ekleyerek benim için çalıştı.
Ryan Tuck

1
Fakat gpg'ye aktarılan verileri şifrelemek istersem, örneğin bir problem çıkarırım echo "encrypt me" | gpg --passphrarse "mypw" -c -o test.gpg. Bunu nasıl çözebilirim?
con-f kullanımlık

2
Peki, gpg'nin Ubuntu sürümü echo "encrypt me" | gpg --passphrase "mypassphrase" --batch --quiet --yes --no-use-agent -c -o encrypted.gpgile iş gibi görünüyor.
-

1
Burada Inappropriate ioctl for deviceve bu olmadan elde ediyorum --batch(gpg (GnuPG) 2.1.18).
Nico Schlömer

2
@RriGriggs Sanmıyorum. echo "hello" | catve echo "hello"| cather ikisi de aynı ipi verir.
Torsten Bronger

36

Yükseltilmiş 2017-12-04. (Parola istemini önlemek için - parti ekleme)

--batchSeçenek eklemeniz gerekebilir :

Sürüm 2'den itibaren GPG, --batchistemde bulunulmamasını sağlamak için bu seçeneğe ihtiyaç vardır ...

$ 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

deneniyor:

$ 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

kulağa hoş gelmek! İyi şimdi:

$ 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

Hiçbir -dparametre verilmezken (SO'nun sorusuyla aynı sözdizimi), şifresi çözülmüş veriler file.gpgyeni bir veriye çıkarılacaktır 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

Bu iyi çalışıyor!

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

"Gpg: gpg-agent bu oturumda mevcut değil" uyarısını almıyorsunuz, bu yüzden muhtemelen ajanda depolanan parolanız var?
Asfand Qazi,

@AsfandYarQazi Hayır, parola komut satırına girilir.
F. Hauri,

Bu cevap benim için çalıştı. Gpg 1.4.16 ile Ubuntu. --passphraseParametre toplu işlemleri için çalışır ve bir parola sormaz.
Trevor Sullivan

Bu olabilir görünen can sıkıcı gpg-agent parolasını önbelleğe çünkü çalışmak. Sistemi tamamen yeniden başlatmayı ve yeni bir başlangıç ​​yapmayı ya da yanlış - şifresi 5678'i (yanlış şifre) girmeyi deneyin.
yahermann

@yahermann: Hemen şimdi denedim unset GPG_AGENT_INFOve hatta GPG_AGENT_INFO=/dev/null, bu (devam) çalışmak için ... Belki üzücü $GPG_AGENT_INFOyardımcı olabilir !? (Bize bildirin; lütfen cevaplayın, bu yardım ederse
düzelteceğim

22

Gpg sürüm 2.x için kullanmanız gerekmez --batch, sadece

--pinentry-mode loopback  

--passphrase& ile çalışır --passphrase-fileve dosya adı çakışmaları durumunda yeni bilgiler girmenize izin verir, örneğin:

gpg --pinentry-mode loopback --passphrase-file=file encrypted.gpg

...
File 'encrypted' exists. Overwrite? (y/N)n
Enter new filename: f2

aksine --batch, hızlı bir şekilde başarısız olacak...failed: File exists

(Debian Stable / Stretch's gpg 2.1.18'de test edilmiştir. Önemli --passphraseseçenekleri görmezden gelme davranışı gerçekten de bir hata olmalı, zaten değilse)


1
Bu, aynı zamanda Ubuntu 18.04 Bionic'te gpg (GnuPG) 2.2.4 ile çalışır
Disassembler

Bu, homebrew ile gpg yükledikten sonra MacOS'ta çalışıyor
Joel

15

Gpg2 kullanıyormuşsunuz gibi geliyor. Sen atmak gerekir --batchyanı seçeneği. (Bunu bir komut dosyasına eklemeyi planlıyorsanız, eklemek --no-ttyve muhtemelen eklemek de isteyeceksiniz --yes.)


3
1.4. kullanarak --batch etkisi yoktur.
Omid

Üzgünüm o zaman @Nima. Sana ne söyleyeceğimi bilemiyorum. GnuPG v1.4 ile parolayı bu seçeneklerden herhangi biriyle birlikte iletmek için başka bir işlem yapmanıza gerek yoktur.
saat

İyi not, @rsaw, şifre istemlerini önlememe yardımcı oldu (ve biraz daha az zarif yankı / STDIN seçeneği).
ryanm

- parti pencerelerde bile yardımcı oldu. hayır
Sin

9

benim için "--no-use-agent" ekleyerek "gpg (GnuPG) 1.4.16" için bunu çözdüm:

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

8

Gpg kullanıyorsanız (GnuPG) 2.2.7 Man sayfasına göre,

--passphrase-fd n

Parola deyimini dosya tanımlayıcısından n. Yalnızca ilk satır dosya tanıtıcısından n okunacaktır. N için 0 kullanırsanız, parola STDIN'den okunur. Bu, yalnızca bir parola sağlanmışsa kullanılabilir.

--passphrase dosya dosyası

Parolayı dosya dosyasından okuyun. Dosya dosyasından sadece ilk satır okunur. Bu, yalnızca bir parola sağlanmışsa kullanılabilir. Açıkçası, diğer kullanıcılar bu dosyayı okuyabilirse, bir dosyada depolanan bir şifre sorgulanabilir bir güvenliktir. Bunu önleyebilirsiniz eğer bu seçeneği kullanmayın.

--passphrase string

Dizeyi parola olarak kullanın. Bu, yalnızca bir parola sağlanmışsa kullanılabilir. Açıkçası, bu çok kullanıcılı bir sistemde çok şüpheli bir güvenlik. Bunu önleyebilirsiniz eğer bu seçeneği kullanmayın.

--pinentry-mode loopbackçalışmak için ekle

Sürüm 2.0'dan beri bu parolanın sadece --batch seçeneği de verildiyse kullanılır. Sürüm 2.1'den bu yana --pinentry modunun geri döngü olarak ayarlanması gerekir.

Örneğin:

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

Hem Are --batchve --pinentry-mode loopbackherhangi --passphrase için gerekli seçenekler ... seçenek çalışmak? V.2.1.18'de, bilgi sayfasında gerekli toplu iş ve pinent ile ilgili aynı şeyi (ancak man sayfasını değil) söyler, ancak yine de yalnızca - pinentry ile çalışır. saçma sapan, geliştiriciler bilerek ciddi hatalar ortaya
koyuyor

4

Benim için sihir gibi çalıştı:

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

Hata: gpg: no valid OpenPGP data found. gpg: processing message failed: eof. Herhangi bir fikir?
Gabriel Staples,

3
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

2

yapmayı denedin mi?

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

Kaynak: İşte


1

Şifreyi komut satırına geçirmek için oldukça güvenli bir yöntem olduğunu düşünüyorum:

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

Bunun yapacağı şey, "echo" komutunu oluşturmak ve bir dosya tanıtıcısını gpg'ye yol adı olarak iletmektir (örn. / Dev / fd / 63). gpg daha sonra anahtarı buradan okuyacaktır. Bu arada, echo komutu paralel olarak çalışmalı ve anahtarı fd'nin arabelleğinde bırakarak anında bitmelidir.

Avantajlar:

  • Gpg komutu, komut satırında parolaya sahip olmayacak
  • Yankı kısa sürecek. Aslında, neredeyse anında olmalı
  • Parola hiçbir zaman diskte bulunmayacak, silinecek bir dosya olmayacak ve komut kesilirse kalanlar kalmayacak

1

Size ubuntu gpg'de $ DISPLAY ayarlandıysa ve şifrenizi sormaya çalıştığımı söyleyip bana ayarlamayacağınızı söylediğinde bana inanmayacaksınız. Bu beklendiği gibi çalışır:

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

Sanırım mühendisliğin bir başka örneği.


1

İşte belki daha fazla yardım için bir yığın akışı cevabına bir link ; Toplu şifre çözme / şifreleme yapan bir projem var ve GnuPG'nin şifreler konusunda çok katı olması nedeniyle , yalnızca nadir durumlarda işe yarayan zor yoldan öğrendim . Bunun yerine seçeneği daha güvenilir olarak düşünün .--passphrase--passphrase-fd

Bu komut yapar doğru kullanımı --passphrase -fdseçeneği ve üzeri alenen test edilmiştir Travis-CI eylem içinde bunun günlükleri bulabilirsiniz.

Şimdi buraya bir örnek kod vermeden bir cevaba sadece link göndermeyeceğim, işte burada oynayabileceğiniz güncellenmiş bir "tek başına" betiği:

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

Yukarıdakiler GitHub’daki bağlantının korunması kadar süslü olmasa da, bu yazının başında verilen cevaptan daha işlevsel olmalı .

Mutlu hackler


1

Man gpg de belirtildiği gibi aşağıdaki seçenek kullanılabilir

- pinentry modu modu Pinentry modunu moda ayarlayın. Mod için izin verilen değerler:

          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.

Bu nedenle, gpg'nin varsayılan davranışı, kullanıcıdan bu parola modunu "--pinentry-mode geridöngü" olarak değiştirirse, parolayı istemenizdir. tamamlanmış komut

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

0

Linux makinasında çalışırken bulduğum basit bir yöntem: 1) gpg'ye alma anahtarı: => shell> gpg —portport_key.key

2) outfile adını vererek şifresini çözmek: => shell> gpg —output -d

2.1) Yukarıdaki komutu vermek parola girmenizi isteyecektir. Paragrafı girin ve gpg dosyasının şifresini çözün.


0
gpg2 -se --passphrase yourpassword --batch --yes -r user@example.com filename

1
Bunun neden sorunu
çözmesi

1
Bu kod parçacığını soruyu çözebilir, ancak açıklama da dahil olmak üzere yazınızın kalitesini yükseltmeye gerçekten yardımcı olur . Gelecekte okurlar için soruyu yanıtladığınızı, sadece şu anda soran kişiye değil, cevap verdiğinizi unutmayın! Lütfen açıklama eklemek için cevabınızı düzenleyin ve hangi sınırlamaların ve varsayımların uygulandığına dair bir gösterge verin.
Toby Speight

0

Sonuna koyun ~/.gnupg/gpg.conf:

use-agent
pinentry-mode loopback

(Belki yeni) dosyanın sonuna koyun ~/.gnupg/gpg-agent.conf:

allow-loopback-pinentry

Ve sonra bu komutu çalıştırın:

echo RELOADAGENT | gpg-connect-agent

Şimdi bunu şifre sormadan çalıştırabiliyorsunuz:

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"

$ 1 şifrelenecek metin ise, $ 2 kullanıcı kimliği ve $ 3 şifredir.

Not: Neden çalıştığını hatırlayamıyorum, ama çalışıyor. Ayrıntıları biliyorsanız, lütfen buraya düzenleyin ve ekleyin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.