Pinentry thất bại với gpg-agent và SSH


12

Tôi đang chạy Fedora 22. Tôi đang cố gắng thiết lập GnuPG để xác thực các kết nối SSH của mình bằng khóa con xác thực PGP được đặt trên Neo Yubikey của tôi.

Tôi có một đơn vị systemd bắt đầu tác nhân gpg như sau:

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

Và tôi đã kích hoạt hỗ trợ SSH trong cấu hình:

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

Các bộ phận khác của thiết lập bao gồm thêm các keygrip khóa của tôi vào ~/.gnupg/sshcontroltập tin, thêm tôi khóa công khai để các máy chủ từ xa và khai báo biến môi trường .

Nhìn toàn cầu vào các bản ghi khác nhau mà thiết lập dường như hoạt động, tôi có thể thấy rằng SSH tìm thấy khóa nhưng thực sự không ký được với nó. Nếu tôi nhìn vào nhật ký từ gpg-agent, tôi có thể thấy rằng nó không khởi chạy pinentrychương trình và do đó, không yêu cầu mã 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>

Những gì chúng ta thấy ở đây là khi được sử dụng kết hợp với SSH, một số cuộc gọi ioctl bị lỗi khi gọi pinentry. Tuy nhiên nếu tôi chạy như sau:

$ echo "Test" | gpg2 -s

Cửa sổ PIN đang bật lên và tất cả đều hoạt động tốt.

Bạn có thể giúp tôi hiểu những gì đang xảy ra với thiết lập và SSH này không?


Tôi đã nhận được một "vấn đề với các agent: ioctl không phù hợp cho điện thoại" tương tự như lỗi khi cố gắng ống đầu ra của tarđể gpg2trên Mac OS X và câu trả lời vigo của giải quyết nó cho tôi.
Kenny Evitt

Câu trả lời:


17

Vâng, điều này làm việc cho tôi:

export GPG_TTY=`tty`

thêm nó vào của bạn .bashrchoặc chỉ đá nó trước khi sử dụng gpg.


10

Tôi đã tìm thấy câu trả lời trên trang web GPG . Tác nhân đã không tìm thấy trên màn hình nào để hiển thị cửa sổ Pinentry. Tôi chỉ cần đặt những điều sau đây trong .*shrctập tin của mình :

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

Cảm ơn bạn! Điều này giúp xác định chính xác vấn đề (cửa sổ pinentry không hiển thị). Tuy nhiên, lệnh trên không làm việc cho tôi. Nếu tôi làm gpg-connect-agentnó đầu ra can't connect to the agent: IPC connect call failed. gpg-agentđang chạy tốt và GPG_AGENT_INFOvars env được thiết lập đúng.

Thú vị thêm export GPG_AGENT_INFOđể .bashrcsửa vấn đề trên với gpg-connect-agent IPC connect call failed. Tôi đã không thêm cái này trước đây vì echo $GPG_AGENT_INFOtrong vỏ của tôi vẫn ổn .. nhưng hóa ra nó vẫn được yêu cầu.

1
Tôi rất muốn biết có bao nhiêu người đã sao chép lệnh này và tự hỏi tại sao họ có một tệp có tên "1" trong thư mục người dùng của họ ..
Kenan Sulayman

1
@KenanSulayman bắt tốt. Tôi đã sửa lệnh.
Spack

2
"Tác nhân đã không tìm thấy trên màn hình nào để hiển thị cửa sổ Pinentry ..." - Phần mềm bị trì hoãn trong thời đại 1980. Không có gì ngạc nhiên khi rất ít người sử dụng GPG. Có lẽ GPG nên chọn cái tôi đang làm việc và ngừng cung cấp các thông báo lỗi vô dụng.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.