106 votes

Comment forcer GPG à utiliser le mode console pour demander les mots de passe ?

L'utilisation de gpg à partir d'un environnement en console comme les sessions ssh échoue car la boîte de dialogue GTK pinentry ne peut pas être affichée dans une session SSH.

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

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

Il y a le --textmode mais apparemment, il fait autre chose.

Quelle serait la manière correcte et propre d'obtenir un code d'accès en texte clair pour les sessions distantes ?

7voto

Aiden Woodruff Points 171

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

Alors, cours :

sudo update-alternatives --config pinentry

Et sélectionnez pinentry-curses dans la liste.

2voto

PvdL Points 127

Pour éviter le popup de pinentry, vous pouvez ssh localhost . Optionnellement, forcer la désactivation de X11, -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) <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:

1voto

unhammer Points 182

J'ai trouvé l'"exemple complet" dans la réponse de PvdL un peu confus, 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

1voto

MensaWater Points 11

Si vous le faites export GPG_TTY=$(tty) y unset DISPLAY il donnera une boîte de dialogue TLI demandant la phrase de passe. En tapant la phrase de passe correcte, le décryptage s'effectue.

Si vous n'effectuez PAS l'exportation de GPG_TTY et la désactivation de DISPLAY ci-dessus, il s'attend à utiliser X Windows. Si vous avez lancé votre session (telle que PuTTY) à partir d'un système MS-Windows avec la redirection X11 activée, il veut envoyer le dialogue X-Window à votre système MS-Windows. Vous pouvez utiliser un émulateur X tel que Exceed ou Cygwin/X sur Windows pour permettre à l'invite X-Window de la phrase de passe d'apparaître sur votre système MS-Windows.

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

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

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

1voto

Victor Yarema Points 288

Je ne suis pas sûr de la version de GPG sur laquelle portait cette question à l'origine. J'utilise GPG v2.2.19 sous (K)ubuntu 20.04 LTS Focal. Tout ce que j'ai eu à ajouter, c'est --pinentry-mode loopback et il a commencé à demander un mot de passe en TTY. Je n'ai pas eu à installer quoi que ce soit. Par exemple :

gpg --pinentry-mode loopback --export-secret-keys -a | less

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X