Làm cách nào để buộc GPG sử dụng pinentry ở chế độ bảng điều khiển để nhắc mật khẩu?


76

Sử dụng gpg từ môi trường dựa trên bảng điều khiển, chẳng hạn như các phiên ssh vì hộp thoại pinent GTK có thể được hiển thị trong phiên SSH.

Tôi đã cố gắng unset DISPLAYnhưng nó không giúp được gì. Các tùy chọn dòng lệnh GPG không bao gồm một công tắc để buộc pinentry vào chế độ console.

Các phiên bản GPG cũ hơn cung cấp lời nhắc dựa trên văn bản hoạt động tốt trong các phiên SSH nhưng sau khi nâng cấp, nó chỉ bị lỗi.

--textmodechuyển đổi dòng lệnh nhưng rõ ràng, nó làm một cái gì đó khác.

Điều gì sẽ là cách thích hợp và rõ ràng để có được mục nhập văn bản đơn giản cho các phiên từ xa?


DISPLAY="" gpg2 ...đã giúp tôi, tôi cũng đã cài đặt pinentry-curses + pinentry-tty trước đó, không chắc chúng có thực sự cần thiết hay không
ThorSummoner

Câu trả lời:


90

Để thay đổi pinentry vĩnh viễn, hãy thêm phần sau vào ~/.gnupg/gpg-agent.conf:

pinentry-program /usr/bin/pinentry-tty

(Trong các phiên bản cũ thiếu pinentry-tty, hãy sử dụng lời nguyền pinentry cho cửa sổ hộp thoại 'full-terminal'.)

Nói với tác nhân GPG để tải lại cấu hình:

gpg-connect-agent reloadagent /bye

9
Nó không hoàn toàn "lành mạnh". Thông thường, gpg-agentbản thân nên phát hiện sự hiện diện hoặc thiếu $DISPLAYvà chọn pinentry phù hợp ...
grawity

6
Tác nhân rất có thể có khả năng phát hiện sự hiện diện của một xorg đang chạy. Nhưng có một DISPLAYđịnh nghĩa không nhất thiết có nghĩa là tôi có thể hoặc muốn sử dụng nó, ví dụ, khi được kết nối qua SSH.
ccpizza

4
@lfxgroove: vấn đề là sukhông thay đổi quyền sở hữu TTY của bạn, vì vậy bạn cần phải tự làm thủ công chown. Xem bài viết này .
Rufflewind

2
@ Starx: Bạn tạo một cái.
grawity

3
Một mẹo khác: để xem tất cả các tùy chọn có sẵn, gõ ls /usr/bin | grep pinentry. Tôi thấy pinentry, pinentry-curses, pinentry-emacs, pinentry-gnome3, pinentry-gtk2, pinentry-qtpinentry-tty. Bằng cách này, bạn có thể chọn một trong những phù hợp với bạn hơn, nếu bạn không có $DISPLAYvấn đề.
Jeffrey Lebowski

8

Tôi vừa gặp sự cố này trên Ubuntu 16.04.3 khi cố gắng tạo / cài đặt khóa riêng bằng gpg2 (2.1.11) trên tài khoản hệ thống mà không có mật khẩu và trên tài khoản người dùng qua ssh. Không có gì làm việc cho:

gpg: key FE17AE6D / FE17AE6D: gửi lỗi đến đại lý: Quyền bị từ chối
gpg: lỗi xây dựng mảng skey: Quyền bị từ chối

Sau đó tôi đã tìm thấy cái này hoạt động cho tôi, vì vậy tóm lại:

pico ~/.gnupg/gpg-agent.conf
# add: allow-loopback-pinentry
gpg-connect-agent reloadagent /bye
gpg2 --pinentry-mode loopback --import private.key

5

Trên hộp debian:

sudo apt install pinentry-tty
sudo update-alternatives --config pinentry

(và đặt nó thành pinentry-tty)


4

Trên Ubuntu 18.04, với cài đặt mặc định của gpg 2.2.4, tôi có

/usr/bin/pinentry
/usr/bin/pinentry-gnome3
/usr/bin/pinentry-gtk-2
/usr/bin/pinentry-x11

Tôi đã có thể làm như sau để có mục nhập mã PIN dựa trên văn bản:

export GPG_TTY=$(tty)
gpg-connect-agent updatestartuptty /bye >/dev/null

3

Nếu bạn không có nó, hãy cài đặt pinentry-cursesvới yum hoặc apt-get.

Sau đó chạy:

sudo update-alternatives --config pinentry

Và chọn pinentry-chửi từ danh sách.


2

Tôi sẽ sao chép câu trả lời của tôi từ đây ...

Nhìn vào man pinentry-gnome3, tôi thấy điều này:

   pinentry-gnome3  implements  a PIN entry dialog based on GNOME 3, which
   aims to follow the GNOME Human Interface Guidelines as closely as  pos‐
   sible.   If the X Window System is not active then an alternative text-
   mode dialog will be used.  There are other flavors that  implement  PIN
   entry dialogs using other tool kits.

Thật không may, dự phòng chế độ văn bản này không hoạt động đối với tôi. Có vẻ như những người khác có cùng một vấn đề . Tuy nhiên, nhận xét này đã thúc đẩy tôi thử một chương trình nhập pin GUI khác : pinentry-gtk2. Bạn có thể chuyển đổi như thế này:

> sudo update-alternatives --config pinentry
There are 3 choices for the alternative pinentry (providing /usr/bin/pinentry).

  Selection    Path                      Priority   Status
------------------------------------------------------------
* 0            /usr/bin/pinentry-gnome3   90        auto mode
  1            /usr/bin/pinentry-curses   50        manual mode
  2            /usr/bin/pinentry-gnome3   90        manual mode
  3            /usr/bin/pinentry-gtk-2    85        manual mode

Press <enter> to keep the current choice[*], or type selection number: 3
update-alternatives: using /usr/bin/pinentry-gtk-2 to provide /usr/bin/pinentry (pinentry) in manual mode

Khi tôi chuyển đổi, nó hoạt động hoàn hảo cho tôi! Trong một thiết bị đầu cuối trên máy tính để bàn, nó sẽ sử dụng mục nhập mật khẩu GUI, nhưng khi tôi ssh vào máy của mình, nó sẽ sử dụng mục nhập mật khẩu chế độ văn bản.


1

Để ngăn chặn các cửa sổ bật lên pinentry bạn có thể ssh localhost. Tùy chọn buộc X11 bị vô hiệu hóa, -x Disables X11 forwarding.Xem ví dụ đầy đủ bên dưới.

patrick@patrick-C504:~$ ssh localhost
patrick@localhost's password: 
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-68-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

Last login: Mon Nov 16 22:48:53 2015 from localhost
patrick@patrick-C504:~$ gpg --gen-key
gpg (GnuPG) 1.4.16; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 4
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 
Requested keysize is 2048 bits
Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 
Key does not expire at all
Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name: Foo
Name must be at least 5 characters long
Real name: FooBar
Email address: foorbar@foo.bar
Comment: 
You selected this USER-ID:
    "FooBar <foorbar@foo.bar>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
You need a Passphrase to protect your secret key.

gpg: gpg-agent is not available in this session
Enter passphrase:

3
Những tính năng đặc biệt nào của X11 nên bị vô hiệu hóa? Cá nhân tôi biết câu trả lời cho câu hỏi của tôi, tác giả thì không, vì vậy câu trả lời dường như không đầy đủ nếu không có thông tin này.
Ramhound

Đối với máy chủ lưu trữ cục bộ là đủ đối với tôi, nhưng tùy chọn -x Disables X11 forwarding.sẽ ngăn chặn mọi chuyển tiếp X11. Câu trả lời được cập nhật.
PvdL

Tôi thích giải pháp này, vì pinentry over -X không hiển thị - Tôi thường sử dụng máy tính xách tay của mình, nơi tôi muốn X pinentry (vì vậy tôi không muốn chỉnh sửa tệp conf mọi lúc), nhưng nếu Tôi tình cờ ssh -X vào nó Tôi vẫn có thể muốn một pinentry nguyền rủa. Tất nhiên, lý tưởng nhất là pinentry gtk thực sự sẽ hoạt động trên ssh -X: - /
unhammer

1

Tôi thấy "ví dụ đầy đủ" trong câu trả lời của PvdL hơi khó hiểu, đây là những gì tôi làm:

ssh -X machine
# work hack hack work until I need something from gpg
ssh -x localhost -p$port
gpg2 --decrypt file.gpg
# enter password to pinentry
exit
# now the key is unlocked in gpg-agent, and I can keep decrypting files
# from my X ssh session without being asked for the password

0

Nếu bạn làm export GPG_TTY=$(tty)unset DISPLAYnó sẽ đưa ra một hộp thoại TLI yêu cầu cụm mật khẩu. Nhập vào cụm mật khẩu chính xác làm cho nó giải mã.

Nếu bạn KHÔNG thực hiện xuất GPG_TTY ở trên và bỏ đặt HIỂN THỊ, nó sẽ sử dụng X Windows. Nếu bạn đã khởi chạy phiên của mình (chẳng hạn như PuTTY) từ hệ thống MS-Windows có bật chuyển tiếp X11, nó muốn gửi hộp thoại X-Window đến hệ thống MS Windows của bạn. Bạn có thể sử dụng trình giả lập X như Exceed hoặc Cygwin / X trên Windows để cho phép lời nhắc X-Window cho cụm mật khẩu xuất hiện trên hộp MS-Windows của bạn.

Tuy nhiên, bạn có thể loại bỏ yêu cầu đặt GPG_TTY và bỏ đặt HIỂN THỊ và nhận TLI hoặc GUI bằng cách chạy dòng lệnh với --batchtùy chọn và đặt cụm mật khẩu với --passphrasetùy chọn:

gpg --batch --passphrase "<passphrase>" -o "<decrypted output file name>" --decrypt "<encrypted input file name>"

Tất cả 3 phương pháp đã làm việc cho tôi ngày hôm nay trên RHEL6 chạy gnupg2.


2
Theo câu trả lời của Roc White , export GPG_TTY=$(tty)là đủ. Bạn đã thử chưa? Bạn có một tài liệu tham khảo mà nói rằng unset DISPLAYcũng cần thiết? PS Mọi người không muốn đặt cụm mật khẩu trên dòng lệnh.
Scott
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.