Pinentry nie działa z gpg-agent i SSH


12

Korzystam z Fedory 22. Próbuję skonfigurować GnuPG w taki sposób, aby moje połączenia SSH były uwierzytelniane przy użyciu mojego podklucza uwierzytelniania PGP, który znajduje się na moim Yubikey Neo.

Mam jednostkę systemową uruchamiającą agenta gpg w następujący sposób:

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

I włączyłem obsługę SSH w konfiguracji:

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

Inne elementy instalacji obejmują dodanie keygrip mojego klucza do ~/.gnupg/sshcontrolpliku, dodając mój klucz publiczny na zdalnym komputerze i deklarowania zmiennych środowiskowych .

Patrząc globalnie na różne dzienniki, które instalator wydaje się działać, widzę, że SSH znajduje klucz, ale tak naprawdę nie podpisuje się nim. Jeśli spojrzę na dzienniki z gpg-agent, widzę, że nie można uruchomić pinentryprogramu, a zatem nie żąda kodu 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>

Widzimy tutaj, że w połączeniu z SSH niektóre połączenia ioctl zawodzą podczas wywoływania pinentry. Jednak jeśli uruchomię następujące:

$ echo "Test" | gpg2 -s

Okno PIN wyskakuje i wszystko działa dobrze.

Czy możesz mi pomóc zrozumieć, co się dzieje z tą konfiguracją i SSH?


Otrzymałem podobny błąd „z agentem: niewłaściwy ioctl dla urządzenia” podczas próby przesłania danych wyjściowych tardo gpg2systemu Mac OS X i odpowiedź vigo rozwiązała to dla mnie.
Kenny Evitt,

Odpowiedzi:


17

Cóż, to zadziałało dla mnie:

export GPG_TTY=`tty`

dodaj to do swojego .bashrclub po prostu wykop go przed użyciem gpg.


10

Odpowiedź znalazłem na samej stronie GPG . Agent nie mógł znaleźć na ekranie, na którym ma zostać wyświetlone okno Pinentry. Po prostu musiałem umieścić w swoim .*shrcpliku:

echo "UPDATESTARTUPTTY" | gpg-connect-agent > /dev/null 2>&1

Dziękuję Ci! Pomogło to zlokalizować problem (okno pinentry nie wyświetla się). Jednak powyższe polecenie nie działa dla mnie. Jeśli to zrobię gpg-connect-agent, wyjdzie can't connect to the agent: IPC connect call failed. gpg-agentdziała poprawnie, a GPG_AGENT_INFOzmienne env są poprawnie skonfigurowane.

Ciekawe dodanie export GPG_AGENT_INFOdo .bashrcrozwiązania powyższego problemu z gpg-connect-agent IPC connect call failed. Nie dodałem tego wcześniej, ponieważ echo $GPG_AGENT_INFOw mojej powłoce było w porządku .. ale okazuje się, że nadal jest wymagane.

1
Chciałbym wiedzieć, ile osób skopiowało to polecenie i zastanawiałem się, dlaczego mają plik o nazwie „1” w folderze użytkownika.
Kenan Sulayman,

1
@KananSulayman good catch. Poprawiłem polecenie.
Spack

2
„Agent nie znalazł, na którym ekranie wyświetlać okno Pinentry ...” - oprogramowanie opóźnione w erze Lol… 1980. Nic dziwnego, że niewiele osób korzysta z GPG. Być może GPG powinien wybrać ten, nad którym pracuję, i przestać wyświetlać niepotrzebne komunikaty o błędach.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.