Як змусити GPG використовувати консольний режим, щоб запросити паролі?


75

Використання gpg з консольного середовища, наприклад, ssh-сеансів, не вдається, оскільки діалогове вікно GTK не може бути показане в сесії SSH.

Я спробував, unset DISPLAYале це не допомогло. Опції командного рядка GPG не включають перемикач для примусового пристосування до консольного режиму.

Старіші версії GPG пропонували текстовий підказку, який добре працював у сесіях SSH, але після оновлення він просто не працює.

Існує --textmodeкомутатор командного рядка, але, мабуть, він робить щось інше.

Який би був правильний та чистий спосіб отримати звичайний текст введення шпильки для віддалених сесій?


DISPLAY="" gpg2 ...допомогли мені, я також встановив заздалегідь прокляття-прокляття + чіп-тти заздалегідь, не впевнений, чи потрібні вони строго
ThorSummoner

Відповіді:


89

Щоб назавжди змінити крапку, додайте до свого ~/.gnupg/gpg-agent.conf:

pinentry-program /usr/bin/pinentry-tty

(У старих версіях, яким не вистачає чіткості, використовуйте прокляття pentry для діалогового вікна "full-terminal".)

Скажіть агенту GPG перезавантажити конфігурацію:

gpg-connect-agent reloadagent /bye

9
Це не зовсім "розумно". Зазвичай, gpg-agentповинен сам виявити присутність чи відсутність $DISPLAYта вибрати
належну розвагу

6
Агент, швидше за все, здатний виявити наявність запущеного xorg. Але наявність DISPLAYвизначеного не обов'язково означає, що я можу або хочу його використовувати, наприклад, при підключенні через SSH.
ccpizza

4
@lfxgroove: проблема полягає в тому, suщо не змінюється право власності на TTY, тому вам потрібно вручну вручну chown. Дивіться цю статтю .
Rufflewind

2
@Starx: ви створили його.
grawity

3
Ще одна порада: щоб переглянути всі доступні опції, введіть ls /usr/bin | grep pinentry. Я бачу pinentry, pinentry-curses, pinentry-emacs, pinentry-gnome3, pinentry-gtk2, pinentry-qtі pinentry-tty. Таким чином, ви можете вибрати той, який вам більше підходить, якщо у вас не вистачає $DISPLAYпроблеми.
Джеффрі Лебовський

8

Я просто мав цю проблему на Ubuntu 16.04.3 при спробі генерування / встановлення приватного ключа за допомогою gpg2 (2.1.11) на системний рахунок без пароля та на обліковий запис користувача через ssh. Нічого не дало:

gpg: ключ FE17AE6D / FE17AE6D: надсилання помилок до агента: дозвіл відхилено
gpg: помилка створення масиву ключів: дозвіл відхилено

Потім я знайшов це, що працювало для мене, так коротко:

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


4

У Ubuntu 18.04 у мене встановлена ​​за замовчуванням gpg 2.2.4

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

Мені вдалося зробити наступне, щоб ввести текстовий PIN-код:

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

3

Якщо у вас його немає, встановіть pinentry-cursesyum або apt-get.

Потім запустіть:

sudo update-alternatives --config pinentry

І виберіть зі списку примхливі прокльони.


2

Я скопію свою відповідь звідси ...

Дивлячись man pinentry-gnome3, я бачу таке:

   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.

На жаль, цей резервний текстовий режим не працює для мене. Здається, інші мають те саме питання . Тим НЕ менше, цей коментар стимулював My спробувати іншу GUI програму пін-запис: pinentry-gtk2. Ви можете переключитися так:

> 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

Як тільки я перейшов, це прекрасно працювало для мене! У терміналі на робочому столі він використовуватиме введення пароля графічного інтерфейсу, але коли я заходжу в машину, він використовуватиме введення пароля в текстовому режимі.


1

Щоб не допустити спливаючих вікон, ви могли ssh localhost. Необов’язково примушувати X11 вимкнено. -x Disables X11 forwarding.Див. Повний приклад нижче.

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
Які функції X11 конкретно слід відключити? Я особисто знаю відповідь на моє запитання, автор ні, тому відповідь здається неповною без цієї інформації.
Рамхаунд

ssh'ing до локального хоста було для мене достатньо, але необов'язково -x Disables X11 forwarding.повинно запобігати переадресації X11. Відповідь оновлюється.
PvdL

Я віддаю перевагу цьому рішенню, враховуючи, що пиляцтво понад -X не з’являється - я зазвичай фізично на своєму ноутбуці, де я хочу X pinentry (тому я не хочу весь час редагувати конф-файл), але якщо Мені трапляється ssh -X в це, можливо, я все-таки хочу проклинати прокляття. Звичайно, в ідеалі, gtk pinentry насправді працюватиме над ssh -X: - /
unhammer

1

Я знайшов "повний приклад" у відповіді PvdL трохи заплутаним, ось що я роблю:

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

Якщо ви робите , export GPG_TTY=$(tty)і unset DISPLAYце дасть діалогове вікно з запитом ІТ парольної фрази. Введення правильної парольної фрази робить її розшифровкою.

Якщо ви НЕ робите вищевказаний експорт GPG_TTY і не знімаєте DISPLAY, він очікує використання X Windows. Якщо ви запустили сеанс (наприклад, PuTTY) із системи MS-Windows із включеною переадресацією X11, він хоче надіслати діалогове вікно X-Window вашій системі MS Windows. Ви можете використовувати емулятор X, такий як Exceed або Cygwin / X в Windows, щоб дозволити відображати підказку X-Window про парольну фразу у вікні MS-Windows.

Однак ви можете усунути необхідність встановити GPG_TTY та скасувати DISPLAY та отримати або TLI, або GUI, запустивши командний рядок з --batchопцією та ввівши пароль через --passphraseпараметр:

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

Всі три методи працювали для мене сьогодні на RHEL6 під керуванням gnupg2.


2
Відповідно до відповіді Рока Уайта , export GPG_TTY=$(tty)достатньо. Ви пробували це? Чи є у вас посилання, яке говорить, що unset DISPLAYце теж необхідно? PS Люди не люблять ставити парольні фрази в командному рядку.
Скотт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.