Pinentry gagal dengan gpg-agent dan SSH

12

Saya menjalankan Fedora 22. Saya mencoba mengatur GnuPG agar koneksi SSH saya diautentikasi menggunakan subkunci otentikasi PGP saya yang terletak di Yubikey Neo saya.

Saya memiliki unit systemd yang memulai agen gpg sebagai berikut:

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

Dan saya telah mengaktifkan dukungan SSH dalam konfigurasi:

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

Bagian lain dari pengaturan termasuk menambahkan keygrip kunci saya ke ~/.gnupg/sshcontrolfile, menambahkan kunci publik saya ke host jarak jauh dan mendeklarasikan variabel lingkungan .

Secara global melihat berbagai log setup tampaknya berfungsi, saya dapat melihat bahwa SSH menemukan kunci tetapi sebenarnya gagal menandatanganinya. Jika saya melihat log dari gpg-agent, saya dapat melihat bahwa ia gagal meluncurkan pinentryprogram dan karena itu, tidak meminta kode 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>

Apa yang kita lihat di sini adalah bahwa ketika digunakan bersama dengan SSH, beberapa panggilan ioctl gagal saat memanggil pinentry. Namun jika saya menjalankan yang berikut ini:

$ echo "Test" | gpg2 -s

Jendela PIN muncul dan semuanya bekerja dengan baik.

Bisakah Anda membantu saya memahami apa yang terjadi dengan pengaturan ini dan SSH?

Spack
sumber
Saya mendapatkan "masalah dengan agen yang sama: kesalahan ioctl untuk perangkat" yang tidak sesuai mencoba menyalurkan output tarke gpg2pada Mac OS X dan jawaban vigo menyelesaikannya untuk saya.
Kenny Evitt

Jawaban:

17

Ya, ini bekerja untuk saya:

export GPG_TTY=`tty`

tambahkan ini ke Anda .bashrcatau cukup tendang sebelum menggunakan gpg.

vigo
sumber
10

Saya telah menemukan jawabannya di Situs Web GPG itu sendiri. Agen gagal menemukan di layar mana untuk menampilkan jendela Pinentry. Saya hanya harus meletakkan yang berikut ini di .*shrcfile saya :

echo "UPDATESTARTUPTTY" | gpg-connect-agent > /dev/null 2>&1
Spack
sumber
Terima kasih! Ini membantu menunjukkan masalah (jendela pinentry tidak muncul). Namun, perintah di atas tidak bekerja untuk saya. Jika saya melakukannya gpg-connect-agentoutput can't connect to the agent: IPC connect call failed. gpg-agentsedang berjalan dengan baik dan GPG_AGENT_INFOenv vars sudah diatur dengan benar.
Menarik export GPG_AGENT_INFOuntuk .bashrcmemperbaiki masalah di atas dengan gpg-connect-agent IPC connect call failed. Saya tidak menambahkan ini sebelumnya karena echo $GPG_AGENT_INFOdi shell saya baik-baik saja .. tetapi ternyata masih diperlukan.
1
Saya ingin tahu berapa banyak orang yang menyalin perintah ini dan bertanya-tanya mengapa mereka memiliki file bernama "1" di folder pengguna mereka ..
Kenan Sulayman
1
@KenanSulayman tangkapan yang bagus. Saya mengoreksi perintah.
Spack
2
"Agen itu gagal menemukan di layar mana untuk menampilkan jendela Pinentry ..." - Lol ... perangkat lunak terbelakang era 1980. Tidak heran sangat sedikit orang yang menggunakan GPG. Mungkin GPG harus memilih yang sedang saya kerjakan dan berhenti memberikan pesan kesalahan yang tidak berguna.