Emacs có thể sử dụng gpg-agent trong một thiết bị đầu cuối không?


11

Tôi hiểu rằng có vấn đề với pinentry-cursesviệc làm việc với emacs (xem một số ý kiến ​​trên http://emacswiki.org/emacs/PalPG ), và vì vậy sử dụng emacs trong thiết bị đầu cuối không tương thích với tác nhân gpg vì điều này .

Tôi không thể sử dụng một công cụ pinentry đồ họa trong trường hợp này vì đây là kết nối ssh với một máy từ xa.

Tuy nhiên, có thể cung cấp cho tác nhân gpg cụm mật khẩu trước đó và sau đó có emacs sử dụng điều này, nhưng không nhắc nhở cụm mật khẩu nếu tác nhân không có thông tin này?

Những cài đặt nào sẽ cho phép điều này hoạt động với notmuch.elEasyPG?

Hoặc, có các phương pháp khác để lưu vào cụm mật khẩu sẽ đạt được hiệu quả tương tự, nhưng có thể có vấn đề về bảo mật (đó là lý do gpg-agent tồn tại ở vị trí đầu tiên)?


1
điều này có nên được chuyển đến emacs.stackexchange.com không?
unhammer

2
Chắc chắn - Đó là ở đây bởi vì tôi không nghĩ emacs.stackexchange.com tồn tại khi tôi đặt câu hỏi :)
David Gardner

Câu trả lời:


4

ĐIỀU NÀY! -> https://github.com/ecraven/pinentry-emacs

Bạn sẽ phải làm một số đau khổ, nhưng sử dụng điều này làm việc cho tôi. Đặt tập lệnh ở đó vào một thư mục trong của bạn PATHvà sau đó thêm mục sau vào ~/.gnupg/gpg-agent.conf:

pinentry-program <path-to-pinentry-emacs>/pinentry-emacs

Sau đó tải lại các đại lý:

$ echo RELOADAGENT | gpg-connect-agent

Hoạt động như một giấc mơ đối với tôi :)


Điều gì xảy ra nếu bạn ở ngoài emacs và cần nhập mã pin? (Có cách nào để sử dụng pinentry-curses khi được hỏi từ bên ngoài emacs và pinentry-emacs khi được hỏi từ bên trong emacs không?)
unhammer

gpg được cho là có thể quay trở lại các pinentry khác nếu nó không thể truy cập vào pinentry của emacs, nhưng tôi có các emacs chạy trên một daemon, vì vậy nó không bao giờ quay trở lại với tôi :( Khi tôi sử dụng, tôi không được chạy emacs như một daemon (thứ gì đó tôi chưa thử) hoặc tôi phải mở cửa sổ emacs để tôi có thể nhập mật khẩu của mình
djhaskin987

3

Một cách khác, nếu bạn có một pinentry / gpg2 khá gần đây (được thử nghiệm với 0.9.7 và 2.1.11 tương ứng trên Arch Linux), là sử dụng http://elpa.gnu.org/packages/pinentry.html .

Cài đặt pinentrytừ M-x list-packages, sau đó đặt

allow-emacs-pinentry

trong của bạn .gnupg/gpg-agent.confvà đặt

(setenv "INSIDE_EMACS" (format "%s,comint" emacs-version))
(pinentry-start)

trong của bạn .emacs.d/init.el. Tôi đã phải đặt setenv vào đó bởi vì, mặc dù INSIDE_EMACS được đặt khi chạy M-x shell, nhưng nó không được đặt khi chỉ cần mở .gpgtệp.

Bây giờ gpg-agent sử dụng phiên bản lời nguyền thông thường từ thiết bị đầu cuối và từ bên trong Emacs mà nó sử dụng read-passwd(ẩn các ký tự khỏi dấu nhắc và từ view-lossage).


EDIT: Có vẻ như gói Debian có một bản vá để loại bỏ hỗ trợ Emacs, vì vậy hiện tại giải pháp này chỉ hoạt động cho các distro / người khác chuẩn bị tự biên dịch pinentry.


Gói trợ giúp pinentry cho biết: "LƯU Ý: Kể từ tháng 6 năm 2015, tính năng này yêu cầu các phiên bản mới hơn của GnuPG (2.1.5+) và Pinentry (chưa được phát hành, có thể là 0.9.5+). Để biết chi tiết, hãy xem thảo luận về gnupg- danh sách gửi thư phát triển: < lists.gnupg.org/pipermail/gnupg-devel/2015-May/029875.html> . " Vì vậy, tôi đã không quản lý để làm việc này nhưng sẽ thử lại sớm!
David Gardner

vâng, bạn cần Ubuntu Xenial hoặc Debian Kéo dài (hoặc dĩ nhiên là Arch)
unhammer

Chỉnh sửa câu trả lời; có vẻ như gói pinentry của Debian đã loại bỏ hỗ trợ Emacs (tuy nhiên được bao gồm trong Arch và Fedora). Xem bug.gnupg.org/gnupg/msg6623 (và lưu ý rằng github.com/ecraven/pinentry-emacs gây nhầm lẫn là một chương trình hoàn toàn khác).
unhammer

1
Sử dụng GuixSD 0.11.0 với gpg 2.1.13 và emacs 25.1.1, gói emacs pinentry là "tích hợp". Ngoài ra, không cần thiết phải đặt biến INSIDE_EMACS nữa, nó chỉ hoạt động, sau khi đặt tùy chọn "allow-emacs-pinentry" và pkill gpg-agentđể nó khởi động lại với cài đặt mới vào lần tiếp theo!
dùng30747
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.