web-dev-qa-db-fra.com

Comment forcer GPG à utiliser Pinentry en mode console pour demander des mots de passe?

L'utilisation de gpg à partir d'un environnement basé sur une console, tel que des sessions ssh, échoue car la boîte de dialogue pinentry de GTK ne peut pas être affichée dans une session SSH.

J'ai essayé unset DISPLAY mais cela n'a pas aidé. Les options de ligne de commande GPG n'incluent pas de commutateur permettant de forcer pinentry en mode console.

Les anciennes versions de GPG offraient une invite textuelle qui fonctionnait bien dans les sessions SSH, mais elle échouait après la mise à niveau.

Il y a le commutateur de ligne de commande --textmode mais apparemment, il fait autre chose.

Quel serait le moyen propre et approprié d’obtenir une broche en texte brut pour les sessions à distance?

70
ccpizza

Pour changer le pinentry de façon permanente, ajoutez ce qui suit à votre ~/.gnupg/gpg-agent.conf:

pinentry-program /usr/bin/pinentry-tty

(Dans les versions plus anciennes dépourvues de pinentry-tty, utilisez pinentry-curses pour une fenêtre de dialogue 'terminal complet'.)

Indiquez à l'agent GPG de recharger la configuration:

gpg-connect-agent reloadagent /bye
86
grawity

Je viens d'avoir ce problème sur Ubuntu 16.04.3 lorsque j'essayais de générer/installer une clé privée avec gpg2 (2.1.11) sur un compte système sans mot de passe et sur un compte d'utilisateur via ssh. Rien n'a fonctionné donnant:

gpg: clé FE17AE6D/FE17AE6D: erreur lors de l'envoi à l'agent: autorisation refusée
gpg: erreur lors de la construction du tableau de clés: autorisation refusée

J'ai alors trouvé ce qui a fonctionné pour moi, donc en bref:

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

Sur une boîte debian:

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

(et le régler sur pinentry-tty)

4

Si vous ne l'avez pas, installez pinentry-curses avec yum ou apt-get.

Ensuite, lancez:

Sudo update-alternatives --config pinentry

Et sélectionnez pinentry-curses dans la liste.

3
Aiden Woodruff

Je vais copier ma réponse de ici ...

En regardant man pinentry-gnome3, je vois ceci:

   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.

Malheureusement, cette solution de secours en mode texte ne fonctionne pas pour moi. Il semble que d’autres aient le même problème . Cependant, ce commentaire m'a incité à essayer un autre programme de saisie de broches d'interface graphique: pinentry-gtk2. Vous pouvez basculer comme ceci:

> 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

Une fois que j'ai changé, cela a parfaitement fonctionné pour moi! Dans un terminal sur le bureau, il utilisera l'entrée de mot de passe de l'interface graphique, mais lorsque je ssh dans ma machine, il utilisera une entrée de mot de passe en mode texte.

2
mblythe

Sur Ubuntu 18.04, avec l’installation par défaut de gpg 2.2.4, j’ai

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

J'ai pu procéder comme suit pour avoir une entrée textuelle PIN:

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

Pour empêcher le popup pinentry vous pourriez ssh localhost. Forcer éventuellement X11 désactivé, -x Disables X11 forwarding. Voir l'exemple complet ci-dessous.

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) <[email protected]>"

Real name: Foo
Name must be at least 5 characters long
Real name: FooBar
Email address: [email protected]
Comment: 
You selected this USER-ID:
    "FooBar <[email protected]>"

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:
1
PvdL

J'ai trouvé le "exemple complet" dans la réponse de PvdL un peu déroutant, voici ce que je fais:

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
1
unhammer

Si vous faites export GPG_TTY=$(tty) et unset DISPLAY, une boîte de dialogue TLI vous demandera la phrase secrète. Taper le mot de passe correct le déchiffre.

Si vous ne faites PAS l'exportation ci-dessus de GPG_TTY et que l'option DISPLAY n'est pas définie, il s'attend à utiliser X Windows. Si vous avez lancé votre session (telle que PuTTY) à partir d'un système MS-Windows avec le transfert X11 activé, il souhaite envoyer la boîte de dialogue X-Window à votre système MS Windows. Vous pouvez utiliser un émulateur X tel que Exceed ou Cygwin/X sous Windows pour permettre à l'invite X-Window pour mot de passe de s'afficher sur votre fenêtre MS-Windows.

Cependant, vous pouvez éliminer le besoin de définir GPG_TTY et de désactiver DISPLAY et d'obtenir soit le TLI, soit l'interface graphique en exécutant la ligne de commande avec l'option --batch et en insérant la phrase secrète avec l'option --passphrase:

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

Les 3 méthodes ont fonctionné pour moi aujourd'hui sur RHEL6 avec gnupg2.

0
MensaWater