GPG se bloque lorsque des clés privées sont accessibles

16

J'aime signer mes commits git avec ma clé PGP, donc j'étais assez alarmé quand je suis allé git commit -Smais au lieu de demander ma phrase secrète de clé PGP, git a juste commencé à se bloquer. Je n'ai pas modifié ma configuration GPG depuis plusieurs mois et j'ai effectué de nombreuses validations depuis lors sans problème. De plus, lorsque j'essaie d'afficher mes clés privées avec gpg -K, gpg se bloque. Cependant, lorsque je cours gpg -kpour afficher mes clés publiques, il renvoie la liste comme d'habitude. J'espère que quelqu'un aura une idée de ce qui cause ce problème et comment le résoudre.

John Leuenhagen
la source
faites-vous cela sur ssh? Si c'est le cas, avez-vous gpg-agentune configuration similaire dans le .bashrc (etc.) du système distant et configurée pour demander l'affichage X de la télécommande ou similaire? j'ai eu des problèmes similaires dans le passé (par exemple, ssh-ing à partir d'un terminal sur ma boîte mythtv vers ma machine de bureau pour exécuter quelque chose nécessitant gpg. a également eu des problèmes similaires avec ssh-agent), et je l'ai "corrigé" par force brute export GPG_TTY=$(tty)dans le .bashrc, pour vous assurer que l'invite est toujours sur le terminal actuel. je ne peux pas supporter les invites de mot de passe GUI de toute façon.
cas
1
Non, je ne le fais pas via SSH. Ce qui est bizarre, c'est que j'ai découvert que si je tue gpg-agent, gpg fonctionne à nouveau. J'essaie de comprendre pourquoi et de trouver une solution à long terme.
John Leuenhagen
Je viens de remarquer dans la gpg-agentpage de manuel que définir GPG_TTY comme ci-dessus n'est pas quelque chose que j'ai piraté pour travailler, c'est obligatoire. La page de manuel indique que vous devez toujours le placer dans votre .bashrc comme je l'ai fait, et dit également It is important that this environment variable always reflects the output of the tty command.- c'est sans doute de là que je l'ai obtenu. Une autre chose à laquelle vous devez faire attention est le programme Pinentry utilisé par gpg-agent. J'ai le mien réglé ~/.gnupg/gpg-agent.confpour/usr/bin/pinentry-curses
cas

Réponses:

21

Je suis tombé sur ce problème exact (OSX Sierra 10.12.6, gpg / GnuPG 2.2.5)

Commandes qui se bloqueraient:

gpg -K # --list-secret-keys
gpg -d # --decrypt
gpg --edit-key
gpgconf --kill gpg-agent

Ma solution était la même que celle mentionnée par John ci-dessus (c.-à-d. Tuer gpg-agent) car la plupart des autres méthodes sur la façon dont-peut-redémarrer-gpg-agent se bloqueraient également.

# Solution    
pkill -9 gpg-agent

Ensuite, pour la signature des commits git, j'ai défini le tty env comme mentionné par cas ci-dessus et également sur gpg-failed-to-sign-commit-object .

export GPG_TTY=$(tty)
CoffeeMonster
la source
Vous devez donc re-tuer gpg à chaque redémarrage? C'est ce que je dois faire depuis longtemps maintenant. J'espère que nous trouverons un moyen de le réparer définitivement.
John Leuenhagen
Je viens de commencer à avoir le problème moi-même. Tuer le gpg-agentsemble être la seule façon de le faire fonctionner à nouveau.
Alexis Tyler