Saya mengharapkan perintah berikut untuk mengekstrak file gpg tanpa meminta kata sandi:
gpg --passphrase 1234 file.gpg
Tetapi meminta kata sandi. Mengapa?
Ini juga memiliki perilaku yang sama:
gpg --passphrase-file passfile.txt file.gpg
Saya menggunakan Ubuntu dengan gnome 3, dan ingat itu bekerja di Fedora
shell-script
gpg
Omid
sumber
sumber
gpg
menjalankan perintah yang benar, bukan alias atau pembungkus? Coba/usr/bin/gpg --passphrase 1234 file.gpg
,type gpg
,gpg --version
danset | grep '^.\{0,9\}PG'
gpg --list-packets --batch myFile.gpg
meminta frasa sandi, sementara itu tidak di GPG 1.x. Itu masalah saya (dalam program yang saya tulis), sementara saya pikir saya punya masalah Anda (paket --list-pack dieksekusi terlebih dahulu, sebelum mencoba mendekripsi, dan saya tidak memperhatikan). Jadi, saya membuat cara baru untuk menentukan apakah file dienkripsi.Jawaban:
Saya berada di kapal yang sama persis Anda (itu bekerja pada Fedora tetapi tidak Ubuntu). Ini adalah pekerjaan nyata yang saya temukan:
Penjelasan: Melewati
0
penyebab--passphrase-fd
membaca dari STDIN bukan dari file. Jadi, pemipaan frasa sandi akan--passphrase-fd
menerima string kata sandi yang Anda tentukan.sumber
--batch --yes
ke atas berhasil bagi saya.echo "encrypt me" | gpg --passphrarse "mypw" -c -o test.gpg
. Bagaimana saya mengatasi ini?echo "encrypt me" | gpg --passphrase "mypassphrase" --batch --quiet --yes --no-use-agent -c -o encrypted.gpg
sepertinya berfungsi.Inappropriate ioctl for device
dengan dan tanpa di--batch
sini (di gpg (GnuPG) 2.1.18).echo "hello" | cat
danecho "hello"| cat
keduanya menghasilkan string yang sama.Ditingkatkan 2017-12-04. (Menambahkan --batch untuk mencegah permintaan frasa sandi)
Anda mungkin harus menambahkan
--batch
opsi:Dari versi 2
GPG
, opsi--batch
diperlukan untuk memastikan tidak ada konfirmasi ... Oke, cari yang:Mencoba:
kedengarannya bagus! Baik sekarang:
Meskipun tidak ada
-d
parameter yang diberikan (sintaksis yang sama dengan pertanyaan SO), data yang didekripsi darifile.gpg
akan diekstraksi ke yang barufile
.Ini bekerja dengan baik!
sumber
--passphrase
parameter bekerja untuk operasi batch, dan tidak meminta password.unset GPG_AGENT_INFO
dan bahkanGPG_AGENT_INFO=/dev/null
, ini (terus) berfungsi ... Mungkin tidak disetel$GPG_AGENT_INFO
dapat membantu !? (Beri tahu kami; tolong jawab, saya akan mengedit jika ini membantu!)Untuk gpg versi 2.x Anda tidak perlu menggunakan
--batch
, cukupbekerja dengan
--passphrase
&--passphrase-file
, dan akan membiarkan Anda memasukkan info baru, jika terjadi konflik nama file misalnya:tidak seperti
--batch
itu akan cepat gagal, mengatakan...failed: File exists
(diuji pada Debian Stabil / Peregangan ini gpg 2.1.18. Perilaku ini mengabaikan penting
--passphrase
pilihan benar-benar harus bug, jika tidak sudah)sumber
Sepertinya Anda menggunakan gpg2. Anda perlu melempar
--batch
opsi juga. (Jika Anda berencana untuk menambahkan ini ke skrip, Anda juga ingin menambahkan--no-tty
dan mungkin--yes
.)sumber
bagi saya, menambahkan "--tidak-gunakan-agen" memecahkan ini untuk "gpg (GnuPG) 1.4.16":
sumber
Jika menggunakan gpg (GnuPG) 2.2.7 Menurut halaman manual,
tambahkan
--pinentry-mode loopback
untuk bekerjaSebagai contoh:
sumber
--batch
dan yang--pinentry-mode loopback
dibutuhkan untuk setiap --passphrase ... opsi untuk bekerja? Pada v.2.1.18 halaman info mengatakan hal yang sama (tetapi bukan halaman manual) tentang batch & pinentry diperlukan, tetapi masih bekerja dengan hanya --pasokan ... Jika keduanya benar-benar diperlukan untuk v.2.2.7 maka semuanya semakin konyol, pengembang sengaja memperkenalkan bug seriusItu bekerja seperti sulap bagi saya:
sumber
gpg: no valid OpenPGP data found. gpg: processing message failed: eof
. Ada ide?sumber
Sudahkah Anda mencoba melakukan:
Sumber: Di sini
sumber
Saya pikir metode yang cukup aman untuk meneruskan kata sandi ke baris perintah adalah ini:
Apa yang akan dilakukan adalah menelurkan perintah "echo" dan meneruskan deskriptor file sebagai nama jalur ke gpg (misalnya / dev / fd / 63). gpg kemudian akan membaca kunci dari sana. Sementara itu, perintah echo harus berjalan secara paralel dan harus selesai secara instan, meninggalkan kunci pada buffer fd.
Manfaatnya adalah:
sumber
Anda tidak akan percaya ketika saya memberi tahu Anda bahwa di ubuntu gpg mencoba menanyakan kata sandi Anda jika $ DISPLAY disetel dan mengambilnya dari commandline --password jika Anda tidak menyetelnya. Ini berfungsi seperti yang diharapkan:
Contoh lain dari teknik yang berlebihan saya kira.
sumber
Berikut ini tautan ke jawaban stackoverflow yang mungkin dapat bantuan lebih lanjut; Saya punya proyek yang melakukan dekripsi / enkripsi massal, dan karena GnuPG sangat ketat tentang frasa sandi, belajar dengan cara yang sulit yang
--passphrase
hanya berfungsi pada kesempatan langka. Alih-alih mempertimbangkan--passphrase-fd
opsi menjadi lebih dapat diandalkan.Ini Script membuat tepat menggunakan
--passphrase -fd
pilihan, dan telah diuji publik melalui Travis-CI mana Anda dapat menemukan log dari dalam tindakan.Sekarang saya tidak akan hanya memposting tautan ke jawaban tanpa memberikan beberapa contoh kode di sini, jadi inilah skrip "berdiri sendiri" yang diperbarui yang dapat Anda mainkan:
Walaupun hal di atas tidak semewah perlindungan tertaut di GitHub, seharusnya lebih fungsional daripada jawaban yang ditautkan pada awal posting ini.
Selamat melakukan peretasan.
sumber
Seperti disebutkan dalam man gpg opsi berikut dapat digunakan
--input-mode mode Atur mode pinentry ke mode. Nilai yang diizinkan untuk mode adalah:
Jadi perilaku default gpg adalah meminta pengguna untuk frasa sandi, jika ubah mode agen pengguna ini menjadi "--pinentry-mode loopback" Ini berfungsi dengan baik. perintah lengkap
sumber
Salah satu metode sederhana yang saya temukan bekerja pada mesin linux adalah: 1) kunci impor ke gpg: => shell> gpg —import private_key.key
2) mendekripsi memberikan nama file outfile: => shell> gpg —output -d
2.1) Memberi perintah di atas akan meminta Anda untuk memasukkan parafrase. Masukkan parafrase dan itu akan mendekripsi file gpg.
sumber
sumber
Masukkan di akhir
~/.gnupg/gpg.conf
:Masukkan di akhir file (mungkin baru)
~/.gnupg/gpg-agent.conf
:Dan kemudian jalankan perintah ini:
Sekarang Anda dapat menjalankan ini tanpa meminta kata sandi:
Di mana $ 1 adalah teks yang akan dienkripsi, $ 2 adalah ID pengguna dan $ 3 kata sandi.
Catatan: Saya tidak ingat mengapa itu bekerja, tetapi itu berhasil. Jika Anda tahu detailnya, silakan edit dan masukkan di sini.
sumber
untuk Ubuntu 18.04 ini bekerja untuk saya
mengenkripsi:
dekripsi:
sumber