Soru Gnupg'ın passphrase-fd argümanı nasıl kullanılır?


GnuPG'leri kullanmak istiyorum decrypt kullanıcı etkileşimi olmadan komut. Senaryo --passphrase-fd argüman tam olarak ihtiyacım olan şey gibi görünüyor. Ama nasıl çalıştığını bilmiyorum - örnekler bulamadım.

Hem Windows hem de UNIX ortamlarında bana böyle bir komut örneği verebilir misiniz?

(FYI, GnuPG 2 kullanıyorum).

Şimdiden teşekkürler :)


25
2017-11-10 20:59


Menşei




Cevaplar:


Gpg seçeneğini kullanabilmek için --passphrase-fd GnuPG v2'de belirtmeniz gerekir --batch parametre. İlk önce nasıl yapacağımı açıklayacağım --passphrase-fd çalışır ve daha sonra örneklere ulaşır.

--passphrase-fd GnuPG hangi dosya tanıtıcı (-fd) parolanın gelmesini beklemek. Standart dosya tanımlayıcıları STDIN (0), STDOUT (1) ve STDERR'dir (2). Bu sorunun bağlamında, normalde sadece STDIN (0) ile ilgili endişe duyarsınız.

Parola kelimesinin nereden geleceğini belirlemediniz, bu yüzden STDIN (standart olarak) kullanımını çeşitli şekillerde göstereceğim.

--passphrase-fd 0 GnuPG'ye girişten gelen parolayı geçerli kabuk içine almasını söyler; Örneğin, GnuPG'nin bir sonraki giriş satırı girişinde parola verisini almasını istiyorsanız, komut ve çıktı şu şekilde olacaktır:

gpg2 --batch --passphrase-fd 0 --armor --decrypt /path/to/encrypted_file.pgp
<next line of input is passphrase followed by hitting enter>
gpg: encrypted with 1024-bit RSA key, ID EC18C175, created 2013-10-26
      "testkey4321 (4321) <test@4321.com>"
this is a test... this is only a test...

Yukarıdaki örnekte, parola, geçerli standart girdideki kabuklara girerek sağladığımız dosya tanıtıcısı 0 (STDIN) aracılığıyla sağlanmıştır.

Bir sonraki örnekte, GnuPG'ye girişten gelen parolayı gerçekte başka bir komutun çıktısı olan varolan kabuk içine almasını söyleyeceğiz (yankı, bu durumda sadece "echos" dediğiniz şey).

echo "mypassphrase" | gpg2 --batch --passphrase-fd 0 --armor --decrypt /path/to/encrypted_file.pgp
gpg: encrypted with 1024-bit RSA key, ID EC18C175, created 2013-10-26
      "testkey4321 (4321) <test@4321.com>"
this is a test... this is only a test...

Parola içeren bir dosyanın içeriğini STDIN'e aktaran başka bir örnek -

cat /path/to/file_with_passphrase | gpg2 --batch --passphrase-fd 0 --armor --decrypt /path/to/encrypted_file.pgp
gpg: encrypted with 1024-bit RSA key, ID EC18C175, created 2013-10-26
      "testkey4321 (4321) <test@4321.com>"
this is a test... this is only a test...

Özetle, --passphrase-fd sadece GnuPG'ye standart bir dosya tanıtıcı aracılığıyla gerekli parolaları beslemek istediğinizi bildirir; GnuPG v2 ve GnuPG arasındaki fark sadece --batch parametre.

Yukarıdaki örnekler Windows ve * nix ortamlarında aynı şekilde çalışmalıdır; tek fark, Windows'taki konfigürasyonunuza ve sürümünüze bağlı olarak değiştirilmenizdir. cat ile type Bir dosyanın içeriğini STDIN'e dökmek için.


33
2018-01-08 21:54



Güzel! Sorumu çıkardığın ve bir cevap verdiğiniz için çok teşekkür ederim! - Blackbird
Teşekkür ederim, bu tam olarak aradığım bilgiler. - dchayka
Windows'da ne 'tip' ne de 'echo' komutuyla çalışamazdım. Ne işe yaradı dosyada parola ve bu dosyayı gpg2'ye itmek. Yani: gpg2 --batch --passphrase-fd 0 --decrypt "dosyatodecrypturi" <"filewithpassphraseuri" - Dolfa
@Dolfa: Çok teşekkür ederim .... pencerelerde kaç kez denediğimi bilmiyorsunuz ...... komutunuz bana gerçekten yardımcı oldu. - Viji


kylehuff'un cevabı hala benim için işe yaramaz, gpupg hala bir şifre sorusu açıyor.

Göre https://wiki.archlinux.org/index.php/GnuPG#Unattended_passphrase gnupg sürüm 2.1.0 ve üstü ile, desteklemek için ek adımlar yapmanız gerekir --passphrase-fd

Öncelikle, geridönüş pinentry moduna izin vermek için gpg-agent yapılandırmasını düzenleyin:   ~ / .gnupg / gpg-agent.conf

allow-loopback-pinentry

Değişikliğin yürürlüğe girmesine izin vermek için çalışıyorsa, gpg-aracı işlemini yeniden başlatın.

İkincisi, uygulamanın geri döngü modunu kullanmak için bir komut satırı parametresi içerecek şekilde güncellenmesi gerekir:

$ gpg --pinentry-mode loopback ...

16
2017-07-08 02:44



Teşekkürler, teşekkürler, teşekkürler, teşekkürler, teşekkürler! Bunu saatlerce savunuyordum ve hiçbir şey, cevabına varıncaya kadar, bunu yapmam gerektiğini söyledi! - ibrewster
Bunu not et allow-loopback-pinentry aslında varsayılan olarak etkindir. Arch wiki'nin neden bu kadar açık bir şekilde söz ettiğinden emin değil. Kaynak: gnupg.org/documentation/manuals/gnupg/Agent-Options.html - jlh
Teşekkürler @JodiTheTigger, bir süre bu cevabı arıyorum! - aceinthehole
Son olarak, iyi bir keder. Doğrulamak için, Win7 gpg 2.2.4 için, bu çalışır: echo thepassword | gpg --pinentry modu loopback --batch - passphrase-fd 0 --decrypt dosyaları * .pgp - Slashback


Son zamanlarda bunu çözmem gerektiğine göre, kendimi de içine çekmeye değer olabileceğini düşündüm.

Eğer dosyaları çözüyorsanız kylehuff'ın yanıtı çok iyidir, ancak borulama gibi giriş / çıkış yönlendirme gereksiniminiz varsa, burada bir0şifreyi geçmek için dosya tanıtıcı.

#!/usr/bin/env bash
# Set some variables for easy modding
Var_fd='9'
Var_pass_location="/path/to/passphrase.file"
Var_gpg_decrypt_opts="--passphrase-fd ${Var_fd} --decrypt"
Var_output_location="out.txt"
Arr_string=( "$@" )
# Open file descriptor and shove the passphrase file into it
exec ${Var_fd}<${Var_pass_location}
# Pipe input array though gpg and append to output file
cat <<<"${Arr_string[*]}" | $(which gpg) ${Var_gpg_decrypt_opts} >> ${Var_output_location}
# Do not forget to close the file descriptor
exec ${Var_fd}>&-

Özel kullanım durumlarının dışında, özel anahtar parolanızı kaydetmenin genellikle kötü bir fikir veya kötü güvenlik uygulaması olarak görüldüğü konusunda uyarılırsınız. -Ayrıca, parolanızın artık bu yöntemle erişilememesi için tanımlayıcıyı kapatmayı lütfen unutmayın.- Sıklıkla, bu kullanım durumlarında özellikle parola olmayan korumalı anahtarları kullanmak için önerdim ancak bu tamamen sizin tercihinizdir . Yukarıdaki kodu beğenirseniz, o zaman ben de hata ayıklama komut dosyasını kontrol etmek isteyebilirsiniz anahtar üretimi daha az yaygın kullanılan gpg dosya tanımlayıcı seçeneklerini bile kapsadığı için katılımsız veya katılımsız.

Düzenlemeler / güncellemeler

Bu yüzden toplu şifre çözme işlemlerinde hata ayıklama işlemi yaptım ve dosya tanımlayıcılarının otomatik olarak kapanacağını veya belki de GnuPG tarafından otomatik olarak kapatıldığını gösterecek kanıtları var. Yapımı kontrol et 152 hemen önce, ham günlüklerin altındaki tüm yol diff çekler, şifrelenmiş verinin ilk bloğunu göreceksiniz yemek yedi Parola, geçerli bir parola olmadan sonraki iki veri bloğunu terk eder. Bu işlemdeki ilgili betikler; ilk önce script_decrypt.sh komut dosyası, test anahtarının parolasını dosya tanıtıcısına ayarlar 9 Yukarıdaki örneklerde gösterildiği gibi Yardımcı komut dosyası Bu dosya tanıtıcıdan yararlanacak şekilde çağrılır ... bu korkak bir kullanım durumudur, ancak hikayenin ahlaki, GnuPG dosya tanıtıcıları ile uygulamak istediğiniz toplu şifre çözme işlemlerinin ne yapması gerektiğini muhtemelen göz önünde bulundurmalıdır. Dosya tanımlayıcılarının yeniden açılmış olması için yukarıda belirtilen adımlar bütün bir işlev olarak özetlenmiştir. Gelecek birkaç seferde yardımcı senaryoyu yeniden yazacağım. Travis-Cl daha büyük kütükler oluşturmak 152 Dosya tanımlayıcılarının kapanacağı yerde bir çözüm bulup bulmadığımı ...

... bu yüzden işleri halletmek için sadece iki deneme yaptık, inşadaki farkı görün 154 hem şifreli dosya hem de ham giriş günlüğü eşleşmesi. Varsayıldığı üzere dosya tanımlayıcıları ilk kullanımdan sonra GnuPG ya da bir alt kabuktan sonra boşaltılarak, şifre çözme işleminin gerçekleşmesi için her şifre çözme komutundan önce parolanın atanması gerekir.

Umarım hepiniz için değerliydi.


2
2017-11-05 07:53





GPG4win / gpg 2.2.3 kullanımı: kullanmak passphrase-fd 0 ve komut istemini atlayın, aşağıdaki işlerin çalıştığını onaylayabilirim:

--pinentry-mode loopback

2
2017-12-06 19:32



ÇALIŞIYOR bir cazibe gibi!!!! - samash