Question Comment signer des validations git en utilisant un IDE comme IntelliJ sous Windows?
Si vous êtes intéressé, lisez ce que j'ai essayé ici:
J'ai suivi principalement Le guide de Github . Je me suis assuré de ne pas oublier de redémarrer bash/IntelliJ après avoir modifié les fichiers de configuration.
.gitconfig
Est le même.git config --global commit.gpgsign true
(J'utilise git 2.12). J'ai effectué un nouveau commit et vérifié qu'il était signé avec git verify-commit HEAD
Lorsque j'essaie de valider dans IntelliJ, j'obtiens gpg: cannot open tty 'no tty'
Donc j'ai trouvé IntelliJ ne parvient pas à valider les modifications lors de la tentative de signature de commit (GPG) et ajouté no-tty
À mon fichier C:\Users\username\.gnupg\gpg.conf
et redémarré.
Ensuite, j'obtiens l'erreur gpg: Sorry, no terminal at all requested - can't get input
Qui semble raisonnable car je viens d'ajouter l'option qui a quelque chose à voir avec aucun terminal. Comme gpg: Désolé, aucun terminal du tout demandé - ne peut pas obtenir d'entrée dit que la solution est de supprimer le no-tty
Qui, je l'espère, ne s'applique pas à mon cas.
D'autres réponses à la première question suggèrent d'ajouter également use-agent
Dans le fichier gpg.conf
, Ce qui entraîne l'erreur supplémentaire gpg: gpg-agent is not available in this session
. Ah attendez, j'ai peut-être besoin de configurer gpg-agent.
Le meilleur guide pour Windows que j'ai pu trouver était le Archlinux wiki (ouais, à droite). Il spécifie d'ajouter à C:/Users/username/.gnupg/gpg-agent.conf
Le temps de vivre, donc je crée ce fichier et j'ajoute default-cache-ttl 34560000
Et max-cache-ttl 34560000
Selon https: //superuser.com/ questions/624343/keep-gnupg-credentials-cached-for-whole-user-session
Maintenant, commençons réellement cet agent gpg, https: //superuser.com/questions/1153101/why-does-git-complain-that-no-gpg-agent-is-running made je vérifie qu'effectivement gpg-agent --version
était bien plus récent que gpg --version
, donc je voudrais avoir gpg2 pour pouvoir exécuter git config --global gpg.program gpg2
.
Mais je n'ai pas de gpg2 disponible sur la ligne de commande. J'ai installé Gpg4win (versions binaires, en bas) et même Gnupg 2 séparément mais cela ne m'a pas donné gpg2 sur la ligne de commande, j'ai remarqué que je devais placer le dossier GNU dans mes Program Files (x86) que je pense que je devrais avoir. Avec where gpg
, J'ai découvert qu'il ne pointait pas du moins le gpg que je venais de télécharger, car celui-ci était en deuxième position. J'ai donc pointé git vers la droite avec git config --global gpg.program 'C:\Program Files (x86)\GnuPG\bin\gpg.exe'
Maintenant, j'ai l'erreur gpg: skipped "keyid": secret key not available
. La solution dans gpg: sauté "N": clé secrète non disponible est ce que je viens de faire, donc cela n'aide pas. Puis j'ai réalisé que j'avais tout configuré avec l'autre gpg, pas avec celui-ci. J'ai fait alias gpg="'C:\Program Files (x86)\GnuPG\bin\gpg.exe'"
, vérifié gpg --version
Et refait le tout. En fait, je mets la ligne d'alias dans mon .bash_profile
Donc je n'ai pas besoin de l'exécuter à chaque fois.
Lorsque j'essaie gpg --gen-key
, Il se bloque immédiatement. Je ne sais pas pourquoi, je ne pense pas que le problème ne soit pas assez d'entropie car l'ancien gpg a bien fonctionné mais il est possible que la nouvelle version nécessite plus d'entropie. En tout cas, je n'ai trouvé aucun utilisateur Windows avec le même problème sur Internet.
Ça marche! Lorsque je valide dans IntelliJ, il ne demande ma phrase secrète avec pinentry qu'une seule fois. Mais maintenant je ne peux pas valider depuis Git Bash, avec l'erreur no secret key
Qui a du sens car comme je l'ai dit gpg --list-keys
Est vide: aucune clé n'est associée à ce gpg.
Intellij IDEA signer GIT s'engage avec GPG est pertinent, mais la seule réponse est pour MAC et ne semble pas s'appliquer à Windows. Cela m'a conduit à:
me.m01.eu indique l'ajout d'une nouvelle variable d'environnement appelée GNUPGHOME
qui pointe vers C:\Users\username\.gnupg
. Ce répertoire existe, mais comme mentionné dans une réponse de la signature de git commit a échoué: clé secrète non disponible Je pense que mon nouveau gpg utilise C:\Users\username\AppData\Roaming\gnupg
Donc je l'ai ajouté à la place. J'ai vérifié avec printenv GNUPGHOME
Que je l'ai ajouté correctement (j'ai dû redémarrer). Mais cela n'a rien changé.
Étant donné que mes clés sont dans C:\Users\username\.gnupg
, J'ai essayé de pointer la variable d'environnement là-bas, mais cela n'a pas aidé, gpg --list-keys
Était toujours vide. J'ai donc dû trouver une autre façon d'indiquer à gpg où se trouvent mes clés.
gpg --list-keys --homedir='C:/Users/s156757/.gnupg'
A donné les bonnes clés, j'ai donc décidé d'ajouter homedir C:\Users\s156757\.gnupg
À mon fichier C:\Users\username\AppData\Roaming\gnupg\gpg.conf
Que je devais créer. À cause de ce bug . J'ai confirmé que gpg --list-keys
Avait rendu mes clés. Toujours la même erreur, l'ajout de no-tty
Et use-agent
À ce fichier de conf n'a pas aidé.
Je peux maintenant valider depuis IntelliJ mais plus avec Git Bash, ce qui donne
skipped "keyid": No secret key
.
Plus de réflexions
gpg --export [ID] | gpg2 --import && gpg --export-secret-keys [ID] | gpg2 --import
gpg --list-secret-keys
N'a jamais rien retourné pour gpg 2. J'ai découvert plus tard que cette commande était différente de gpg --list-keys
.En bref, c'est le principal problème: gpg-agent permet la mise en cache des phrases secrètes mais la version gpg de git ne correspond pas à la version gpg-agent, vous devez donc installer le bon gpg 2 vous-même en premier. Mais je n'ai pas réussi à faire cette installation de telle manière que je pouvais valider depuis Git Bash et IntelliJ.
IDEA n'est pas un terminal et ne peut pas gérer la signature pour le moment. Voir https://youtrack.jetbrains.com/issue/IDEA-127802 .
Il existe cependant une solution de contournement, vérifiez le https://youtrack.jetbrains.com/issue/IDEA-127802#comment=27-1866498
Cela devrait faciliter l'utilisation de gpg pour signer automatiquement les validations. Pour être exact, git version 2.19.1 a au moins gpg 2.2.9. Ces instructions ont été testées sur Windows 7, Windows 8.1, Windows 10, Arch Linux et Fedora 29.
Étapes pour configurer la signature de validation git
Démarrez (sous Linux) un terminal ou (sous Windows) git bash, vérifiez avec git --version
Que git est au moins 2.19.1 et avec gpg --version
Que vous utilisez gpg2.
Sinon, vérifiez avec where gpg
(Ou which gpg
Si la commande where
n'est pas disponible) que le chemin le plus haut est celui de git.
gpg2
Au lieu de gpg
, donc gpg2 --version
. Si cela fonctionne, vous devrez désormais utiliser gpg2
Au lieu de gpg
.alias gpg="'C:\path\to\Git\usr\bin\gpg.exe'"
Dans votre C:\Users\username\.bash_profile
, Créez le fichier s'il n'existe pas et redémarrez git bash. Essayez à nouveau where gpg
Et gpg --version
. À partir de maintenant, où gpg
est tapé dans un fichier, vous devez le remplacer par 'C:\path\to\Git\usr\bin\gpg.exe'
.Vérifiez la sortie de gpg --version
Si le répertoire personnel ressemble à (sous Linux) /home/username/.gnupg
Ou (sous Windows) /c/Users/username/.gnupg
. Ce répertoire ne doit pas encore exister.
Si le chemin est incorrect, essayez de le changer - par exemple, une fois sous Windows, j'ai vu que mon domicile était préfixé par le chemin dans lequel j'ai exécuté la commande, j'ai donc mis un alias dans le .bash_profile
Avec alias gpg="gpg --homedir=/c/Users/s156757/.gnupg"
Et redémarré bash, puis vérifié à nouveau.
gpg --full-generate-key
user.name
Comme dans votre ~\.gitconfig
.user.email
Dans votre ~\.gitconfig
, En vous assurant que cet e-mail est un e-mail vérifié sur GitHub.gpg --list-secret-keys --keyid-format LONG
. Faites-le maintenant et copiez le key_id
(Comme je nommerai votre clé à partir de maintenant) de la sortie sec rsa4096/key_id 2018-10-27 [SC] ...
.gpg --armor --export key_id
.Settings | SSH and GPG keys
et ajoutez le bloc de clé publique (y compris l'en-tête et le pied de page).git config --global user.signingkey key_id
.--homedir
Auparavant, vous devez vous assurer que lorsque git démarre gpg, la maison est également correctement modifiée. Créez un fichier C:\Users\username\start-gpg.sh
Et insérez-le gpg --homedir=/c/Users/s156757/.gnupg "$@"
. Exécutez ensuite git config --global gpg.program C:\\Users\\username\\start-gpg.sh
Pour dire à git de l'utiliser.git commit -S -m "signed commit"
Et confirmez qu'il est vérifié sur Github, vous devriez voir un petit badge lorsque vous visualisez votre commit.git config --global commit.gpgsign true
. Effectuez un nouveau commit et vérifiez s'il a été signé avec git verify-commit HEAD
.Vous avez terminé.
Pour moi, cette option ne fonctionnait pas: je devais toujours fournir ma phrase secrète souvent, mais pas toujours. Mais en théorie, cela fonctionne:
C:\Users\username\.gnupg\gpg-agent.conf
: Créez un fichier s'il n'existe pas, ajoutez default-cache-ttl 34560000
Et max-cache-ttl 34560000
.gpgconf --kill gpg-agent
Verified
sur GitHub.Cela signifie que vous n'avez jamais à fournir votre mot de passe, mais pour moi, cela signifie que GitHub met un badge Unverified
sur ma validation. Question ici: La clé dont l'ID-clé est dans la signature n'a pas signé ce commit
C:\Users\username\start-gpg.sh
Par le code ci-dessous. Si ce n'est pas le cas, créez le fichier avec le contenu ci-dessous, supprimez l'indicateur --homedir
Et exécutez git config --global gpg.program C:\\Users\\username\\start-gpg.sh
. Dans tous les cas, redémarrez bash.Oui, vous allez placer votre mot de passe en clair sur votre ordinateur! Si vous connaissez une meilleure façon, veuillez laisser un commentaire ...
# Passphrase-file-descriptor is set to 0 (STDIN), to use it --batch must be used
# The --pinentry-mode loopback is required since gpg 2.1.0 for --passphrase-fd
# The "$@" makes sure that whatever git wanted gpg to do, is still done
echo mypassphrase | gpg --homedir=/c/Users/username/.gnupg --passphrase-fd 0 --batch --yes --pinentry-mode loopback "$@"
Verified
sur GitHub.Pour la référence, voici les instructions complètes, ou plutôt les étapes que j'ai faites pour le faire fonctionner quelque peu. Par "travail", je veux dire que les commits sont signés automatiquement, mais il y a deux inconvénients:
unverified
: The key whose key-id is in the signature did not sign this commit. Someone may be trying to trick you.
La question de suivi à ce sujet est La clé dont l'ID de clé est dans la signature n'a pas signé ce commitSi vous êtes bloqué, vérifiez les étapes de la question pour voir si j'ai eu le même problème.
.gitconfig
Sont les mêmes.Définissez les validations à signer par défaut avec git config --global commit.gpgsign true
. Effectuez un nouveau commit et vérifiez s'il a été signé avec git verify-commit HEAD
.
La version gpg fournie avec git est trop ancienne, alors installez Gpg4win (versions binaires, en bas) qui devrait installer gpg 2. Avec where gpg
Vous devriez voir deux chemins, dont le second est probablement votre nouveau gpg, quelque chose comme C:\Program Files (x86)\GnuPG\bin\gpg.exe
. Sinon, essayez d'installer Gnupg 2 séparément de la page des téléchargements.
J'ai mis alias gpg="'C:\Program Files (x86)\GnuPG\bin\gpg.exe'"
pour pointer la commande gpg
vers mon nouveau gpg dans mon C:\Users\username\.bash_profile
, Redémarrer Git Bash et vérifier avec gpg --version
Que j'utilise maintenant gpg 2.
Ajoutez une nouvelle variable d'environnement appelée GNUPGHOME
qui pointe vers C:\Users\username\.gnupg
. Redémarrez et vérifiez avec printenv GNUPGHOME
Que vous l'avez ajouté correctement.
Créez un script C:\Users\username\gpg-no-tty.sh
Et mettez-y echo passphrase | "C:\Program Files (x86)\GnuPG\bin\gpg.exe" --passphrase-fd 0 --batch --no-tty --yes "$@"
La raison pour laquelle vous mettez votre phrase secrète en texte clair ici est que l'option --batch
, Qui fait que tout fonctionne, a besoin de la phrase secrète. Pour moi, il semble qu'il devrait exister une meilleure solution que d'enregistrer votre phrase secrète en texte brut sur votre ordinateur, veuillez donc laisser un commentaire si vous avez trouvé quelque chose de mieux.
Pointez git sur ce script avec git config --global gpg.program C:\\Users\\username\\gpg-no-tty.sh
.
Maintenant, testez à la fois dans Git Bash et IntelliJ que vous pouvez valider et vérifiez que cela a fonctionné en faisant git verify-commit HEAD
.