GPG Gentoo Linux mengenkripsi file yang melewati parameter dengan benar tetapi melempar “ioctl untuk perangkat yang tidak sesuai” saat membaca dari input standar

23

Saya menjalankan Gentoo Hardened dengan kernel 4.1.7-hardened-r1 dan saya mencoba untuk mengenkripsi file menggunakan GPG dari sesi shell yang dibuka dari SSH dan dengan DISPLAYvariabel yang dinonaktifkan untuk menggunakan kutukan pinentry untuk password prompt. Menggunakan gpg -o file.gpg --symmetric filesaya dapat mengenkripsi dengan baik. Menggunakan pv file | gpg -o file.gpg --symmetricsaya mendapatkan pesan kesalahan berikut:

gpg-agent[30745]: command get_passphrase failed: Inappropriate ioctl for device
RAKK
sumber

Jawaban:

41

Anda harus mengatur variabel GPG_TTY Anda agar berfungsi, seperti dalam dokumen ini :

GPG_TTY=$(tty)
export GPG_TTY

Kedua baris tersebut seharusnya berada di .bashrc(dengan asumsi bash) Anda, jadi itu dijalankan setiap kali Anda membuka sesi terminal baru.

Namun, ada solusi lain: di bash Anda dapat menjalankan pvdan berpura-pura itu file, menggunakan subtitusi proses:

gpg -o file.gpg --symmetric <(pv file)

Karena itu, mungkin bukan ide yang baik untuk menyambungkan hal-hal ke program yang mengharapkan input tambahan. Ini dapat bekerja secara berbeda dari yang diharapkan.

TNW
sumber
Apakah ada cara untuk mengubah atau memperbaiki perilaku ini? Saat ini saya baru saja mencoba perintah read-from-stdin yang sama pada Debian dan GPG yang meminta kata sandi saya.
RAKK
@RAKK Bisakah Anda mendekripsi file yang dihasilkan?
TNW
Ya, tanpa hambatan pada Debian. Buat file kecil dengan data acak yang disebut dsfargeg, dienkripsi dengan pv dsfargeg | gpg -o dsfargeg.gpg --symmetric, masukkan kata sandi ketika diminta, dekripsi output dengan gpg -o dsfargeg.gpg.dec --decrypt dsfargeg.gpg, masukkan kata sandi Anda, dan bandingkan dengan aslinya dan file yang didekripsi sha256sum dsfargeg dsfargeg.gpg.dec. Kedua hash akan sama.
RAKK
@RAKK Anda benar. Tampaknya gpg terbuka /dev/ttydi Debian. Ini adalah versi 1.4, dalam kasus saya; gpg mendapat sedikit perbaikan sejak itu. Pendekatan itu mungkin telah dibatalkan karena beberapa alasan - Anda mungkin ingin mencari tahu lebih lanjut sendiri (atau ini bisa berupa patch khusus Debian). Karena itu, mungkin lebih baik bagi Anda untuk tidak mengandalkannya. Saya akan menggali di dalam jejak, untuk memeriksa apa yang sebenarnya terjadi di gpg yang lebih baru (saya punya 2.1).
TNW
Anehnya, saya sudah menemukan solusinya! Pengaturan variabel GPG_TTY melakukannya untuk saya. Saya akan memperbarui jawabannya.
TNW