Gentoo Linux GPG должным образом шифрует файл, переданный через параметр, но выдает «Неуместный ioctl для устройства» при чтении со стандартного ввода


23

Я использую Gentoo Hardened с ядром 4.1.7-hardened-r1 и пытаюсь зашифровать файл с помощью GPG из сеанса оболочки, открытого из SSH, и с DISPLAYотключенной переменной, чтобы использовать pinentry-curses для запроса пароля. Используя gpg -o file.gpg --symmetric fileя могу зашифровать просто отлично. Используя pv file | gpg -o file.gpg --symmetricя получаю следующее сообщение об ошибке:

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

Ответы:


41

Вы должны установить свою переменную GPG_TTY, чтобы она работала, как в этом документе :

GPG_TTY=$(tty)
export GPG_TTY

Эти две строки должны быть в вашей .bashrc(предположим, bash), поэтому они запускаются каждый раз, когда вы открываете новый сеанс терминала.

Однако есть и другое решение: в bash вы можете запустить свой файл pvи представить его как файл, используя подстановку процесса:

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

Таким образом, может быть плохой идеей передавать данные в программы, которые ожидают дополнительного ввода. Это может работать не так, как ожидалось.


Есть ли способ изменить или исправить это поведение? Прямо сейчас я попробовал точно такую ​​же команду read-from-stdin в Debian, и GPG запросила мой пароль.
RAKK

@RAKK Не могли бы вы расшифровать полученный файл?
TNW

Да, без помех на Debian. Создайте небольшой файл со случайными данными dsfargeg, который вызывается, зашифруйте его pv dsfargeg | gpg -o dsfargeg.gpg --symmetric, введите пароль, когда будет предложено, расшифруйте вывод gpg -o dsfargeg.gpg.dec --decrypt dsfargeg.gpg, введите пароль и сравните исходный и расшифрованный файл с sha256sum dsfargeg dsfargeg.gpg.dec. Оба хэша будут одинаковыми.
RAKK

@RAKK Ты прав. Похоже, что gpg открывается /dev/ttyна Debian. Это была версия 1.4, хотя, в моем случае; С тех пор gpg получил небольшой пересмотр. Этот подход может быть по какой-то причине отброшен - вы можете узнать больше самостоятельно (или это может быть какой-то специфический патч для Debian). Поэтому вам, вероятно, было бы лучше не рассчитывать на это. Я буду копаться в следах, чтобы проверить, что именно происходит в новом gpg (у меня есть 2.1).
TNW

Как ни странно, я нашел решение! Установка переменной GPG_TTY делает это для меня. Я обновлю ответ соответственно.
TNW
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.