gpg n'a pas réussi à signer les données fatales: n'a pas réussi à écrire l'objet de validation [Git 2.10.0]

319

J'ai suivi quelques articles sur les jolis attributs de la note de publication de Git 2.10 . En passant par ce qui a mis à niveau le git à 2.10.0 et apporté des modifications à global .gitconfigrésultant comme suit -

[filter "lfs"]
    clean = git-lfs clean %f
    smudge = git-lfs smudge %f
    required = true
[user]
    name = xyz
    email = [email protected]
    signingkey = AAAAAAA
[core]
    excludesfile = /Users/xyz/.gitignore_global
    editor = 'subl' --wait
[difftool "sourcetree"]
    cmd = opendiff \"$LOCAL\" \"$REMOTE\"
    path = 
[mergetool "sourcetree"]
    cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
    trustExitCode = true
[alias]
    lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
[color "diff"]
    old = red strike
    new = green italic

Mais maintenant que j'essaie de signer mes commits en utilisant

git commit -a -S -m "message"

J'arrive à voir l'erreur suivante -

Vous avez besoin d'un mot de passe pour déverrouiller la clé secrète pour

utilisateur: "XYZ (signé numériquement)"

Clé RSA 2048 bits, ID AAAAAAAA, créée le 2016-07-01

erreur: gpg n'a pas réussi à signer les données fatales: impossible d'écrire l'objet de validation

Remarque - Je peux toujours valider les modifications à l'aide degit commit -a -m "message"

Existe-t-il un moyen de surmonter la même chose? Ou tout changement requis dans les gpgconfigs pour pouvoir passer à la mise à niveau de git?


Mise à jour 1

Toujours à la recherche d'utilité supplémentaire, suite Y a-t-il un moyen de "signer automatiquement" les validations dans Git avec une clé GPG? . J'ai déjà configuré la clé en utilisant

git config --global user.signingkey ED5CDE14(with my key) 
git config --global commit.gpgsign true

et de toute évidence obtenir la même erreur de toute façon.

Naman
la source
3
Je fais face à un problème similaire. J'ai désinstallé Git 2.8 (git-scm) sous Windows. Et installé 2.10. Maintenant, je reçois gpg failed to sign the datachaque fois que j'utilise -S. En 2.8, je peux signer un commit sans problème. Je ne sais pas ce qu'il se passe.
Illuminateur du
5
L'ajout a user.signingkeyrésolu mon problème, assez étrangement.
Xavier Ho
1
@nullpointer J'ai supprimé ma réponse à partir de là, car après un examen approfondi, j'ai réalisé que c'était un doublon!
Shayan Amani
1
Ironie du sort, j'avais changé ma machine pour remettre les choses en place et j'ai fini par chercher ma propre question et aucune des solutions suggérées ne me semble assez propre pour commencer tout simplement.
Naman
1
Pour moi, le correctif était: git config user.namewas! = Nom utilisé lors de la création de la clé PGP
stacksonstacks

Réponses:

464

J'ai rencontré ce problème avec OSX.

Réponse originale:

Il semble comme une mise à jour de GPG (de bière) changé à l' emplacement de gpgla gpg1, vous pouvez changer le binaire où les regards git jusqu'à la GPG:

git config --global gpg.program gpg1

Si vous n'avez pas gpg1: brew install gpg1.

Réponse mise à jour:

Il semble que gpg1 soit obsolète / "légèrement retiré de l'utilisation" , vous devriez donc probablement mettre à jour vers gpg2, malheureusement cela implique quelques étapes supplémentaires / un peu de temps:

brew upgrade gnupg  # This has a make step which takes a while
brew link --overwrite gnupg
brew install pinentry-mac
echo "pinentry-program /usr/local/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf
killall gpg-agent

La première partie installe gpg2, et ce dernier est un hack requis pour l'utiliser . Pour le dépannage, voir cette réponse (bien qu'il s'agisse de Linux pas de brassage), il suggère un bon test:

echo "test" | gpg --clearsign  # on linux it's gpg2 but brew stays as gpg

Si ce test réussit (aucune erreur / sortie ne comprend la signature PGP), vous avez mis à jour avec succès la dernière version gpg.

Vous devriez maintenant pouvoir à nouveau utiliser la signature git!
Il convient de noter que vous devrez avoir:

git config --global gpg.program gpg  # perhaps you had this already? On linux maybe gpg2
git config --global commit.gpgsign true  # if you want to sign every commit

Remarque: Après avoir exécuté un commit signé, vous pouvez le vérifier signé avec:

git log --show-signature -1

qui inclura les informations gpg pour le dernier commit.

Andy Hayden
la source
7
Définir gpg.program sur / usr / local / bin / gpg (pas de "1") l'a corrigé pour moi.
Iskar
5
Il semble une mise à jour gnupg2avec brewsali avec des liens symboliques ainsi gpgété enlevé, j'ai eu des liens de correctifs à l' aide brew link --overwrite gnupg2.
Brice
8
hm ... ne fonctionne pas. donne toujours mon erreur avec la connexion à xcode.
Albert T. Wong
1
@DrBeco n'est-ce pas l'emplacement / comportement d'origine? J'ai toujours le même problème sur osx (je pense avoir mis à jour mon brassage assez récemment), gpg1c'est l'exécutable toujours exporté.
Andy Hayden
29
killall gpg-agent && gpg-agent --daemon --use-standard-socket --pinentry-program /usr/local/bin/pinentryenfin réglé pour moi
Dan Bechard
319

Si gnupg2 et gpg-agent 2.x sont utilisés, assurez-vous de définir la variable d'environnement GPG_TTY.

export GPG_TTY=$(tty)

Consultez la documentation de GPG sur les problèmes courants .

Koraktor
la source
18
Si vous utilisez du poisson, mettez set -x GPG_TTY (tty)votre profil.
fasfsfgs
@StuartCardall Quel est l'intérêt de la commande chown? En règle générale, il vous a déjà été attribué par un processus système lorsque vous vous êtes connecté ou avez créé le pseudo-tty. S'il appartient à quelqu'un d'autre et que vous n'êtes pas root, il échouera. Si le groupe est autre chose, cela n'a probablement pas d'importance et les utilisateurs ne seront généralement pas dans le groupe tty.
poolie
@poolie - il importe si vous suà rootun serveur distant
Stuart Cardall
6
J'ai ajouté la variable à ~/.zshrcet je peux faire de nouveau des commits, maintenant qu'elle se connecte correctement au terminal. Merci pour votre aide!
Alex Gurrola
C'est également dans les instructions GitHub: help.github.com/articles/telling-git-about-your-gpg-key
bonh
198

Si tout échoue, utilisez GIT_TRACE=1pour essayer de voir ce que git fait réellement:

$ GIT_TRACE=1 git commit -m "Add page that always requires a logged-in user"
20:52:58.902766 git.c:328               trace: built-in: git 'commit' '-vvv' '-m' 'Add page that always requires a logged-in user'
20:52:58.918467 run-command.c:626       trace: run_command: 'gpg' '--status-fd=2' '-bsau' '23810377252EF4C2'
error: gpg failed to sign the data
fatal: failed to write commit object

Exécutez maintenant la commande défaillante manuellement:

$ gpg -bsau 23810377252EF4C2
gpg: skipped "23810377252EF4C2": Unusable secret key
gpg: signing failed: Unusable secret key

Il s'avère que ma clé était expirée, gitn'était pas à blâmer.

Bombe
la source
34
Belle astuce pour le débogage. +1
VonC
4
Cela m'a en fait aidé à résoudre mon propre problème, et c'est une solution pour chaque type de problème avec ce message d'état. +1
xHocquet
Merci pour le débogage. Ma clé a également expiré.
Sgnl
2
Merci! Cela m'a conduit à mon problème. Curieusement, ma section locale .git/configavait un nameprojet spécifié qui ne correspondait pas à mon e-mail de signature. C'était suffisant pour le rejeter.
kross
1
Eh bien, exécuter gpg -bsau <key>sur ma machine n'exécute rien. Est-ce supposé prendre trop de temps à exécuter? Ou cela signifie-t-il que la clé peut être utilisée correctement? @VonC des idées?
Naman
82

Je l' ai DONE à travers cette courte et facile recette:

La signature automatique s'engage sur macOS (globalement et avec différents IDE):

Obtenez votre signingkeyde cette façon .

brew install gnupg gnupg2 pinentry-mac
git config --global user.signingkey <YOUR_SIGNING_KEY>
git config --global commit.gpgsign true
git config --global gpg.program gpg

Mettez ce qui suit dans le gpg.conffichier (éditez le fichier avec la nano ~/.gnupg/gpg.confcommande):

no-tty

Mettez ce qui suit dans le gpg-agent.conffichier (éditez le fichier avec la nano ~/.gnupg/gpg-agent.confcommande):

pinentry-program /usr/local/bin/pinentry-mac

Mise à jour :

Vous devrez peut-être exécuter la killall gpg-agentcommande après avoir modifié le fichier de configurations gpg.conf, selon les commentaires. Comme l'indique la commande explicite, cette commande mettra fin à l'agent GPG (Gnu Privacy Guard).

Shayan Amani
la source
2
Pouvez-vous également expliquer ce que font ces commandes? Cela vous aidera à comprendre.
Un Droid
7
J'ai également dû exécuter un killall gpg-agentaprès avoir défini les fichiers de configuration, puis cela a fonctionné!
Pascal Ludwig
Comment savons-nous que nous pouvons faire confiance aux gens derrière pinentry-mac? Je ne dis pas que nous ne pouvons pas, mais l'organisation GPGTools est sauvegardée par une très petite équipe et le dépôt n'a que 5 contributeurs par rapport à l'utilisation, brew install gnupgce qui exploite le travail de gnupg.org .
sunknudsen
Dans le cas où cela aiderait les autres, mon problème était que j'avais un user.signingkeyensemble local non valide , que je n'avais pas remarqué dans ma configuration sourcetree, ni mes paramètres globaux (parce que je ne pensais pas à regarder la configuration locale) Assurez-vous à la fois local ( git config --local --get user.signingkey) et global ( git config --global --get user.signingkey) sont les mêmes, ou mieux encore, désactivent le local s'il n'est pas valide ( git config --local --unset user.signingkey)
Glenn 'devalias'
sur OSX (10.13.06), il donne l'erreur suivante, bash: pinentry-program: command not found
cgl
59

Peut aider à tuer un processus gpg-agentqui pourrait rester bloqué avec d'anciennes données. Donc, un nouveau gpg-agentdépart demanderait un mot de passe.

MaximKostrikin
la source
2
Cela l'a fait pour moi.
danyim
12
Utilisez gpg-agent --daemonpour le démarrer
FooBar
1
j'ai aussi dû redémarrer gpg-agent
GnrlBzik
8
Pour tuer le processus sur macOS:killall gpg-agent
incleaf
1
sur ubuntugpgconf --kill gpg-agent
Adam
38

Suivez l'URL ci-dessous pour configurer la validation signée https://help.github.com/en/articles/telling-git-about-your-signing-key

si toujours obtenir gpg n'a pas réussi à signer les données fatales: impossible d'écrire l'objet de validation

ce n'est pas un problème avec git, c'est avec GPG suivez les étapes ci-dessous

1.gpg --version

  1. echo "test" | gpg --clearsign

s'il montre:

gpg: signing failed: Inappropriate ioctl for device
gpg: [stdin]: clear-sign failed: Inappropriate ioctl for device
  1. puis utilisez export GPG_TTY=$(tty)

4.Essayez à nouveau echo "test" | gpg --clearsign dans quelle signature PGP est obtenue.

  1. git config -l | grep gpg

gpg.program = gpg commit.gpgsign = true

6. appliquer git commit -S -m "commitMsz"

jayesh
la source
1
c'était la solution pour moi! Merci beaucoup!
upInCloud
Excellent guide pour savoir si c'est le problème.
Philippe Signoret
C'est ce qui m'a fait ça. Merci beaucoup!
Allan Guwatudde
export GPG_TTY=$(tty)était l'astuce. Ajouté à mon .zshrcfichier
Shane Stillwell
22

Pour toute personne confrontée à ce problème sur les machines MacOS , essayez ceci:

  1. brew uninstall gpg
  2. brew install gpg2
  3. brew install pinentry-mac (si besoin)
  4. gpg --full-generate-key Créez une clé à l'aide d'un algorithme.
  5. Obtenez la clé générée en exécutant: gpg --list-keys
  6. Réglez la clé ici git config --global user.signingkey <Key from your list>
  7. git config --global gpg.program /usr/local/bin/gpg
  8. git config --global commit.gpgsign true
  9. Si vous souhaitez exporter votre clé vers GitHub alors: gpg --armor --export <key> et ajoutez cette clé à GitHub sur les clés GPG: https://github.com/settings/keys (avec les lignes START et END incluses)

Si le problème persiste:

test -r ~/.bash_profile && echo 'export GPG_TTY=$(tty)' >> ~/.bash_profile

echo 'export GPG_TTY=$(tty)' >> ~/.profile

Si le problème persiste:

Installez https://gpgtools.org et signez la clé que vous avez utilisée en appuyant sur Signer dans la barre de menus: Clé -> Signer

Si le problème persiste:

Aller à: votre global .gitconfigfichier qui dans mon cas est à l' adresse: /Users/gent/.gitconfig Et modifier le .gitconfig fichier (s'il vous plaît assurez - vous Email et Nom sont les mêmes avec celui que vous avez créé tout en générant la clé) :

[user]
	email = [email protected]
	name = Gent
	signingkey = <YOURKEY>
[gpg]
	program = /usr/local/bin/gpg
[commit]
	gpsign = true
	gpgsign = true
[filter "lfs"]
	process = git-lfs filter-process
	required = true
	clean = git-lfs clean -- %f
	smudge = git-lfs smudge -- %f
[credential]
	helper = osxkeychain

Gent Berani
la source
2
L'ajout de 'gpsign = true' dans .gitconfig l'a corrigé pour moi
Pierre
18

Mes deux cents ici:

Lorsque vous créez et ajoutez une clé à gpg-agent, vous définissez quelque chose appelé passphrase. Maintenant qu'à un passphrasecertain point expire, etgpg vous avez besoin de l'entrer à nouveau pour déverrouiller votre clé afin que vous puissiez recommencer à signer.

Lorsque vous utilisez un autre programme avec lequel une interface gpg, gpgl'invite vous demandant de saisir votre phrase secrète n'apparaît pas (en principe, gpg-agentlorsque démonized ne peut pas vous montrer la boîte de dialogue d'entrée dansstdin ).

L'une des solutions consiste gpg --sign a_file.txtalors à saisir la phrase secrète que vous avez saisie lors de la création de votre clé, puis tout devrait bien gpg-agentse passer ( devrait automatiquement signer)

Consultez cette réponse pour savoir comment définir des délais d'expiration plus longs pour votre phrase secrète afin que vous n'ayez pas à le faire tout le temps.

Ou vous pouvez supprimer complètement la phrase secrète avec ssh-keygen -p

Modifier: faites un man gpg-agentpour lire quelques trucs sur la façon dont cela doit se produire automatiquement et ajoutez les lignes:

GPG_TTY=$(tty)
export GPG_TTY

sur votre .bashrc si vous utilisez bash (c'est la bonne réponse mais je garde aussi ma pensée ci-dessus)

George Daramouskas
la source
Merci @ george-daramouskas, c'était mon problème.
Nic Barker
10

Mise à jour d'octobre 2016: le numéro 871 mentionnait «La signature a cessé de fonctionner dans Git 2.9.3»

Git pour Windows 2.10.1 publié il y a deux jours (4 octobre 2016) a corrigé la signature GPG interactive des commits et des balises.

le récent changement de signe gpg dans git (qui n'introduit aucun problème sous Linux) expose un problème dans la façon dont, sous Windows, les non-MSYS2-git interagissent avec MSYS2-gpg.


Réponse originale:

En lisant " 7.4 Git Tools - Signing Your Work ", je suppose que vous avez votre " user.signingkey" jeu de configuration.

Le dernier gros refactoring (avant Git 2.10) autour de gpg était en commit 2f47eae2a , ici ce message d'erreur a été déplacé versgpg-interface.c

Un journal sur ce fichier révèle le récent changement de commit af2b21e (Git 2.10)

gpg2 utilise déjà le format long par défaut, mais la plupart des distributions semblent toujours avoir "gpg" comme l'ancienne version 1.x pour des raisons de compatibilité. Et les anciennes versions de gpg ne montrent que l'ID court 32 bits, ce qui est assez peu sûr.

Cela n'a pas vraiment d'importance pour la vérification elle-même: si la vérification réussit, la signature pgp est bonne.
Mais si vous ne disposez pas encore de la clé et que vous souhaitez la récupérer, ou si vous souhaitez vérifier exactement quelle clé a été utilisée pour la vérification et que vous souhaitez la vérifier, nous devons spécifier la clé avec plus de précision.

Vérifiez donc comment vous avez spécifié votre user.signingkeyconfiguration et la version de gpg que vous utilisez (gpg1 ou gpg2), pour voir si celles-ci ont un effet sur le message d'erreur.

Il y a aussi le commit 0581b54 qui change la condition du gpg failed to sign the datamessage d'erreur (en complément du commit 0d2b664 ):

Nous ne lisons pas du tout de stderr actuellement. Cependant, nous voulons dans un patch futur, donc cela nous prépare également là (et dans ce GPG cas ne écriture avant de lire tous les commentaires formulés , mais encore une fois, il est peu probable qu'un uid clé remplira un tampon de tuyau).

Commit 4322353 montre que gpg utilise maintenant un fichier temporaire, donc il pourrait y avoir de bons problèmes à ce sujet.

Convertissons en utilisant un objet tempfile, qui gère les cas difficiles pour nous, et ajoutons l'appel de nettoyage manquant.

VonC
la source
J'ai ma user.signingkeyconfiguration configurée. Utilisant également gpg (GnuPG) 2.0.3.
Naman
@nullpointer J'ai modifié ma réponse. Pouvez-vous vérifier si le problème persiste avec Gti pour Windows 2.10.1.
VonC
désolé pour la mise à jour tardive, travaillant sur MacOSX et non sur Windows, nous n'avons donc pas pu le vérifier.
Naman
10

La trace de git était très révélatrice pour ma situation ...

   GIT_TRACE=1 git commit -m "a commit message"
   13:45:39.940081 git.c:344               trace: built-in: git commit -m 'a commit message'
   13:45:39.977999 run-command.c:640       trace: run_command: gpg --status-fd=2 -bsau 'full name <[email protected]>'
   error: gpg failed to sign the data
   fatal: failed to write commit object

J'avais besoin de générer une clé initiale selon le format qui gitvérifiait. Il est préférable de copier la valeur transmise -bsauci-dessus dans les journaux tels quels et de l'utiliser ci-dessous.

Alors ça devient,

   gpg --quick-generate-key "full name <[email protected]>"

Ensuite, cela a fonctionné.

J'espère que cela pourra aider.

phyatt
la source
Cela a fonctionné pour moi et a git traceété vraiment utile.
philip oghenerobo balogun
1
camarade ... vous ne pouvez pas imaginer combien d'heures j'ai passé à essayer de résoudre ce problème jusqu'à ce que j'atteigne votre réponse ... c'était le nom de la clé tout le long .. merci! Merci! Merci!
giomanda
8

En utilisant cygwin, je suis récemment passé à gpg2. Ensuite, j'ai eu le même problème pour signer avec git après avoir définigit config gpg.program gpg2 .

Essayez echo "test" | gpg2 --clearsignde voir si gpg2 fonctionne. Je l'ai trouvé la solution la plus simple à définir git config gpg.program gpg, car cela fonctionne. Mais vous obtiendrez également une meilleure erreur de cette façon - par exemple, vous devez installer Pinentry.

lucidbrot
la source
En fait, sur certaines distributions Linux, vous pouvez vous retrouver avec le même problème. Git utilise toujours gpg, pas gpg2. Voir aussi: stackoverflow.com/questions/34766123/…
rugk
Cela m'a révélé l'erreur gpg: signing failed: Inappropriate ioctl for devicequi peut être résolue par export GPG_TTY=$(tty). Source: github.com/keybase/keybase-issues/issues/2798
swiknaba
8

Sur OS X, en utilisant gnupg2via brew, je devais juste tuer l'agent gpg , cela arrive parfois:

pkill -9 gpg-agent

Et définissez la envvariable si nécessaire:

export GPG_TTY=$(tty)

Voir aussi les problèmes GPG courants et cette réponse ici aussi.

trainoasis
la source
2
Cela a également fonctionné pour moi. J'ai créé un nouvel alias alias fix-gpg='pkill -9 gpg-agent && export GPG_TTY=$(tty)'.
oalders
1
Cela fonctionne bien, merci. N'a même pas eu besoin de définir la variable env par la suite.
Nick Rameau
8

J'ai vu des réponses similaires, mais rien de tel que ce qui a fonctionné pour moi. Sous Linux, j'ai dû tuer et redémarrer mon gpg-agentavec:

$ pkill gpg-agent
$ gpg-agent --daemon
$ git commit ...

Cela a fait l'affaire pour moi. Il semble que vous devez également avoir user.signingkeydéfini votre clé privée à partir de ce que disent d'autres commentaires.

$ git config --global user.signingkey [your_key_hash]
Engineero
la source
6

Peut-être un agent gpg suspendu.

Essayez gpgconf --kill gpg-agent comme discuté ici

Salon9
la source
6

J'ai eu cette erreur sur Ubuntu 18.04 et il s'est avéré que ma clé était expirée .

Pour voir cela, j'ai exécuté ceci et cela a confirmé que mes clés étaient expirées:

gpg --list-keys

Pour corriger cela, j'ai couru (en utilisant l'ID affiché dans la commande précédente):

gpg --edit-key <ID>

De là, j'ai prolongé l'expiration key 0et le key 1suivi de ces instructions qui se résumaient à taper key 0puis expireet à suivre les invites. Puis répéter pour key 1.

Ensuite, pour tester cela, j'ai couru:

echo test | gpg --clearsign

Et avant le correctif, il a échoué avec l'erreur:

gpg: pas de clé secrète par défaut: pas de clé secrète
gpg: [stdin]: échec du signe clair: pas de clé secrète

Mais après le correctif, la même commande a réussi à signer le message, donc je savais que les choses fonctionnaient à nouveau!

gMale
la source
La confirmation de ce problème a résolu un problème lors de l'importation d'une clé valide de Mac OSX Catalina vers CentOS7. A combattu avec cette bête pendant plus de deux heures en essayant de comprendre pourquoi elle continuait à demander un mot de passe, entre autres. Curieusement, il était déjà réglé pour ne jamais expirer, et je l'ai défini pour ne jamais expirer.
Cody B
5

J'ai rencontré le même problème. Je suis heureux d'annoncer que le problème ne réside pas dans git 2.10.0mais avec gnupg 1.4.21.

La rétrogradation temporaire de gnupg vers 1.4.20 a résolu le problème pour moi.

Si vous utilisez homebrew et que vous avez mis à jour vos packages comme je l'ai fait, vous pouvez probablement simplement brew switch gnupg 1.4.20revenir en arrière.

Arno
la source
3

Assurez-vous que votre e-mail est correctement configuré.

git config --global user.email "[email protected]"
Weston Reed
la source
1
C'est la seule solution qui a fonctionné pour moi, a été utile pour suivre la bonne méthode de génération d'une clé GPG via github
Naz
1
Dans mon cas, le problème était que j'utilisais un e-mail d'entreprise dans un référentiel spécifique, pour lequel je n'avais pas généré de clé PGP.
rubick
3

Si l'e-mail associé à l'ID de votre clé GPG est différent de l'e-mail que vous utilisez dans git, vous devrez ajouter un autre ID utilisateur à votre clé OU utiliser une clé à laquelle l'e-mail correspond exactement.

Vous pouvez ajouter un autre UID en utilisant:

$ gpg --edit-key

Voir pour mo /superuser/293184/one-gnupg-pgp-key-pair-two-emails

JavaRocky
la source
1
C'était tout pour moi. Christ, comment n'y a-t-il pas un message d'erreur plus informatif que "n'a pas réussi à signer les données".
Alec
3

Je dois avoir mis à jour accidentellement gpg d'une manière ou d'une autre parce que je l'ai obtenu après avoir essayé de tester si gpg fonctionne:

gpg: WARNING: server 'gpg-agent' is older than us (2.1.21 < 2.2.10)
gpg: Note: Outdated servers may lack important security fixes.
gpg: Note: Use the command "gpgconf --kill all" to restart them.

La course l'a gpgconf --kill allréparé pour moi.

J'espère que cela aide quelqu'un.

Visokoo
la source
2

J'ai eu un problème similaire avec les dernières sources Git (2.12.2) construites avec les dernières sources de toutes ses dépendances (Zlib, Bzip, cURL, PCRE, ReadLine, IDN2, iConv, Unistring, etc.).

Il s'est avéré que cela libreadlineposait des problèmes à GnuPG:

$ gpg --version
gpg: symbol lookup error: /usr/local/lib/libreadline.so.7: undefined symbol: UP

Et bien sûr, essayer d'obtenir des informations utiles de Git avec -vvvéchec, donc l'échec était un mystère.

Pour résoudre l'échec PGP en raison de ReadLine, suivez les instructions de Impossible de mettre à jour ou d'utiliser le gestionnaire de packages - erreur gpg :

Dans le terminal:

ls /usr/local/lib

il y avait un tas de bibliothèques readline là-dedans (libreadline.so.BLAH-BLAH) donc je:

su
mkdir temp
mv /usr/local/lib/libreadline* temp
ldconfig
jww
la source
2

Les réponses ci-dessus sont excellentes mais elles n'ont pas fonctionné pour moi. Ce qui a résolu mon problème a été d'exporter le public et le secret clés .

lister les clés de la machine d'où nous exportons

$ gpg --list-keys
/home/user/.gnupg/pubring.gpg
--------------------------------
pub 1024D/ABCDFE01 2008-04-13
uid firstname lastname (description) <[email protected]>
sub 2048g/DEFABC01 2008-04-13

exporter les clés

$ gpg --output mygpgkey_pub.gpg --armor --export ABCDFE01
$ gpg --output mygpgkey_sec.gpg --armor --export-secret-key ABCDFE01

aller à la machine vers laquelle nous importons et importer

$ gpg --import ~/mygpgkey_pub.gpg
$ gpg --allow-secret-key-import --import ~/mygpgkey_sec.gpg

bingo bongo, vous avez terminé!

référence: https://www.debuntu.org/how-to-importexport-gpg-key-pair/

ps. Mes clés ont été initialement créées sur bootcamp windows 7 et je les ai exportées sur mon mac air (même machine physique, différente virtuellement)

asus
la source
2

Je suis sur Ubuntu 18.04 et j'ai eu la même erreur, j'étais inquiet pendant des semaines aussi. Enfin réalisé que gpg2 ne pointe vers rien. Alors lancez simplement

git config --global gpg.program gpg

Et tada, ça marche comme du charme.

Validation signée

Vos validations auront désormais une balise vérifiée avec eux.

Aashutosh Rathi
la source
2

Je suis tombé sur cette erreur non pas à cause d'un problème de configuration, mais parce que ma clé a expiré. La façon la plus simple de prolonger sa validité sur OSX est d'ouvrir l'application GPG Keychain (si vous l'avez installée) et elle vous invitera automatiquement à la prolonger. Deux clics, et vous avez terminé. Espérons que cela aide les autres Googleurs :)

maxhm10
la source
2

Cela a commencé à se produire tout à coup pour moi sur Ubuntu, je ne sais pas si une mise à jour récente l'a fait, mais aucun des problèmes existants ne m'était applicable (j'avais GPG_TTYréglé, essayé de tuer l'agent, etc.). La gpgcommande autonome échouait avec cette erreur:

$ echo "test" | gpg --clearsign
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

test
gpg: signing failed: Operation cancelled
gpg: [stdin]: clear-sign failed: Operation cancelled

J'ai essayé de courir gpgavec l' --debug-alloption et j'ai remarqué la sortie ci-dessous:

gpg: DBG: chan_3 <- INQUIRE PINENTRY_LAUNCHED 27472 gnome3 1.1.0 /dev/pts/6 screen-256color -
gpg: DBG: chan_3 -> END
gpg: DBG: chan_3 <- ERR 83886179 Operation cancelled <Pinentry>
gpg: signing failed: Operation cancelled

Ce qui précède indique qu'il y a un problème avec le pinentryprogramme. Gpg fonctionne normalement pinentry-cursespour moi, donc je l'ai changé en pinentry-tty(je devais d' aptitude installabord le faire) et l'erreur a disparu (bien que je n'obtienne plus l'entrée de mot de passe en plein écran, mais je n'aime pas ça de toute façon). Pour effectuer ce changement, j'ai dû ajouter la ligne pinentry-program /usr/bin/pinentry-ttyà ~/.gnupg/gpg-agent.confet tuer l'agent avec gpgconf --kill gpg-agent(il est redémarré la prochaine fois).

haridsv
la source
1

Aucune des réponses ci-dessus ne semble correspondre à mon problème. Mon gpgbinaire ( /usr/local/bin/gpg -> /usr/local/MacGPG2/bin/gpg2) a été installé dans le cadre de GPG Suite , plutôt que par brassage.

Néanmoins, je sentais que le conseil se résumait à: "utiliser le gpgbinaire le plus récent disponible sur le brassage". J'ai donc essayé:

brew update
brew upgrade git
brew install gpg

# the following are suggestions from brew's Caveats, to make `/usr/local/bin/gpg`
# point to the brew binary:
rm '/usr/local/bin/gpg'
brew link --overwrite gnupg2

J'ai vérifié que j'avais correctement changé le gpgsur mon $PATHpour pointer vers le nouvel exécutable de brew:

🍔 which gpg
/usr/local/bin/gpg
🍔 ls -l /usr/local/bin/gpg
lrwxr-xr-x  1 burger  admin  33 Feb 13 13:22 /usr/local/bin/gpg -> ../Cellar/gnupg2/2.0.30_3/bin/gpg

Et j'ai aussi explicitement dit à git quel gpgbinaire utiliser:

git config --global gpg.program gpg

Eh bien, ce n'est peut-être pas complètement étanche, car il est sensible au chemin. Je ne suis même pas allé jusqu'à confirmer sans aucun doute que Git était passé à l'invocation du breuvage gpg.

En tout cas: rien de tout cela n'était suffisant pour que git commitje signe à nouveau mes commits avec succès.


La chose qui a fonctionné pour moi a finalement été de mettre à jour GPG Suite . J'utilisais la version 2016.7 et j'ai constaté que la mise à jour vers 2016.10 a résolu le problème pour moi.

J'ai ouvert GPG Keychain.appet j'ai cliqué sur "Vérifier les mises à jour…". Avec la nouvelle version: les validations signées ont de nouveau fonctionné correctement.

Bouleaux
la source
J'ai essayé de mettre à jour vers la dernière version ... cela n'a pas fonctionné non plus. essayer de se connecter à xcode.
Albert T. Wong
1

l'a installé simplement:

brew uninstall gpg 

brew install gpg2
Anurag pareek
la source
1

Tout comme @birchlabs, après beaucoup de recherches / fouilles, j'ai trouvé que ce n'était pas GPG, mais plutôt GPG Suite. Je l'ai fait cask reinstall gpg-suiteet cela m'a résolu.

John
la source
0

Si cela s'est produit au hasard et a fonctionné parfaitement dans le passé, comme c'est mon cas, essayez de vous déconnecter ( cmd+shift+q) et de vous reconnecter.

Skylar Brown
la source
0

Dans mon cas, aucune des solutions mentionnées dans d'autres réponses n'a fonctionné. J'ai découvert que le problème était spécifique à un référentiel. La suppression et le clonage du dépôt ont à nouveau résolu le problème.

David Miguel
la source
0

Un peu bizarre, mais assurez-vous que votre terminal est assez grand! Vous pouvez dire si elle est trop petite en exécutant echo test | gpg --clearsign- cela vous donnera un message d'erreur assez évident vous en informant. S'il n'est pas assez grand, votre agent GPG ne peut pas afficher sa petite boîte ncurses.

Celui-ci ne s'appliquera pas si vous utilisez un agent GUI ou quelque chose qui n'utilise pas ncurses.

Action en justice de Fund Monica
la source