Пинентри терпит неудачу с gpg-agent и SSH

12

Я использую Fedora 22. Я пытаюсь настроить GnuPG, чтобы мои SSH-соединения аутентифицировались с помощью моего подраздела аутентификации PGP, который находится на моем Yubikey Neo.

У меня есть системный модуль, запускающий gpg-agent следующим образом:

/usr/bin/gpg-agent --homedir=%h/.gnupg --daemon --use-standard-socket

И я включил поддержку SSH в конфигурации:

enable-ssh-support
pinentry-program /usr/bin/pinentry-gtk

Другие части настройки включают в себя добавление ключевой ручки моего ключа в ~/.gnupg/sshcontrolфайл, добавление моего открытого ключа на удаленный хост и объявление переменных среды .

В целом, просматривая различные журналы, кажется, что установка работает, я вижу, что SSH находит ключ, но на самом деле не может подписать его. Если я посмотрю журналы от gpg-agent, то увижу, что программа не запускается pinentryи, следовательно, не запрашивает PIN-код:

2015-07-22 23:23:28 gpg-agent[6758] DBG: error calling pinentry: Ioctl() inappropriate for a device <Pinentry>
2015-07-22 23:23:28 gpg-agent[6758] DBG: chan_8 -> BYE
2015-07-22 23:23:28 gpg-agent[6758] DBG: chan_7 -> CAN
2015-07-22 23:23:28 gpg-agent[6758] DBG: chan_7 <- ERR 100663573 The IPC call was canceled <SCD>
2015-07-22 23:23:28 gpg-agent[6758] smartcard signing failed: Ioctl() inappropriate for a device
2015-07-22 23:23:28 gpg-agent[6758] ssh sign request failed: Ioctl() inappropriate for a device <Pinentry>

Здесь мы видим, что при использовании в сочетании с SSH некоторые вызовы ioctl не выполняются при вызове pinentry. Однако, если я запускаю следующее:

$ echo "Test" | gpg2 -s

Окно PIN-кода выскакивает, и все работает нормально.

Можете ли вы помочь мне понять, что происходит с этой настройкой и SSH?

Spack
источник
Я получал похожую ошибку «проблема с агентом: несоответствующий ioctl для устройства» при попытке перенаправить вывод tarto gpg2на Mac OS X, и ответ vigo решил эту проблему для меня.
Кенни Эвитт

Ответы:

17

Ну, это сработало для меня:

export GPG_TTY=`tty`

добавьте это к себе .bashrcили просто пните его перед использованием gpg.

виго
источник
10

Я нашел ответ на самом сайте GPG . Агент не смог найти, на каком экране отображать окно Pinentry. Я просто должен был положить следующее в моем .*shrcфайле:

echo "UPDATESTARTUPTTY" | gpg-connect-agent > /dev/null 2>&1
Spack
источник
Спасибо! Это помогло точно определить проблему (окно пинентри не отображается). Тем не менее, приведенная выше команда не работает для меня. Если я делаю gpg-connect-agentэто выводит can't connect to the agent: IPC connect call failed. gpg-agentработает нормально, и GPG_AGENT_INFOenv vars настроены правильно.
Интересно , добавив export GPG_AGENT_INFOк .bashrcфиксированному данному вопросу с gpg-connect-agent IPC connect call failed. Я не добавлял это ранее, потому что echo $GPG_AGENT_INFOв моей оболочке все было в порядке ... но, оказывается, все еще требуется.
1
Я хотел бы знать, сколько людей скопировали эту команду и удивились, почему у них есть файл с именем «1» в их пользовательской папке ..
Кенан Сулейман,
1
@KenanSulayman хороший улов. Я исправил команду.
Spack
2
«Агенту не удалось найти, на каком экране отображать окно Pinentry ...» - Lol ... 1980-е годы отсталое программное обеспечение. Не удивительно, что очень немногие люди используют GPG. Возможно, GPG следует выбрать тот, над которым я работаю, и прекратить предоставлять бесполезные сообщения об ошибках.