Переадресация gpg-agent: неподходящий ioctl для устройства

Я пытаюсь настроить переадресацию gpg-agent для использования pass ( https://www.passwordstore.org/) через ssh.

gpg версии 2.2.9 как на локальных, так и на удаленных хостах, устанавливается по инструкции: https://gist.github.com/vt0r/a2f8c0bcb1400131ff51

На локальной машине

$HOME/.gnupg/ GPG-agent.conf

extra-socket /home/mickey/.gnupg/S.gpg-agent.remote

Перезагрузить агент

echo RELOADAGENT | gpg-connect-agent

Экспортировать открытый ключ

gpg --export -a mickey > mickey.gpg

Подписать тестовые данные

echo "test" | gpg2 --encrypt -r mickey > out.gpg

Отправить открытый ключ и подписанные данные

scp *.gpg REMOTE_HOST:

Создать сессию SSH с обратной пересылкой

ssh -R /run/user/1002/gnupg/S.gpg-agent:/home/mickey/.gnupg/S.gpg-agent.remote -o "StreamLocalBindUnlink=yes" REMOTE_HOST

На удаленной машине

Импортировать открытый ключ

gpg --import mickey.gpg

Доверься этому ключу в конечном итоге

gpg --edit-key mickey

trust 5 quit

Попробуй расшифровать

gpg --decrypt -v out.gpg

Выход
gpg: public key is FED6243A3325C554
gpg: connection to agent is in restricted mode
gpg: using subkey FED6243A3325C554 instead of primary key 9E2ED69A02554504
gpg: using subkey FED6243A3325C554 instead of primary key 9E2ED69A02554504
gpg: encrypted with 2048-bit RSA key, ID FED6243A3325C554, created 2018-07-23
      "mickey"
gpg: public key decryption failed: Inappropriate ioctl for device
gpg: decryption failed: No secret key

Итак, переадресация сокетов агентов работает, кажется, есть некоторые проблемы с программой pinentry. Не могу найти ничего, что работает для меня в Google.

UPD

Пытался добавить pinentry-program /usr/bin/pinentry-tty в gpg-agent.conf, новая ошибка:

gpg: public key decryption failed: Invalid IPC response
gpg: decryption failed: No secret key

3 ответа

Это происходит, когда GPG не понимает, откуда читать входные данные. Простая настройка для поиска ввода от tty (терминал, подключенный к стандартному входу) исправляет это:

export GPG_TTY=$(tty)

Этот метод не работает, когда вы находитесь внутри контейнера LXC. Вместо этого добавьте это в~/.gnupg/gpg.conf:

use-agent 
pinentry-mode loopback

Затем добавьте это в ~/.gnupg/gpg-agent.conf

allow-loopback-pinentry

Затем перезапустите агент с помощью echo RELOADAGENT | gpg-connect-agent.

( источник)

При запуске gpg из сценария необходимо указать аргумент --batch.

Другие вопросы по тегам