TLDR; Utilisez un fichier netrc chiffré avec Git 1.8.3+ .
L'enregistrement d'un mot de passe pour une URL HTTPS du référentiel Git est possible avec un ~/.netrc
(Unix) ou %HOME%/_netrc
(notez le _
) sous Windows.
Mais : ce fichier stockerait votre mot de passe en texte brut.
Solution : cryptez ce fichier avec GPG (GNU Privacy Guard) et faites-le décrypter par Git chaque fois qu'il a besoin d'un mot de passe (pour push
/ pull
/ fetch
/ clone
opération).
Remarque: avec Git 2.18 (Q2 2018), vous pouvez désormais personnaliser le GPG utilisé pour décrypter le .netrc
fichier crypté .
Voir commit 786ef50 , commit f07eeed (12 mai 2018) de Luis Marsano (``) .
(Fusionné par Junio C Hamano - gitster
- dans commit 017b7c5 , 30 mai 2018)
git-credential-netrc
: accepter l' gpg
option
git-credential-netrc
a été codé en dur pour décrypter avec ' gpg
' quelle que soit l'option gpg.program.
C'est un problème sur les distributions comme Debian qui appellent autre chose le GnuPG moderne, comme ' gpg2
'
Instructions pas à pas pour Windows
Avec Windows:
(Git a un gpg.exe
dans sa distribution, mais l'utilisation d'une installation GPG complète inclut un gpg-agent.exe
, qui mémorisera votre phrase secrète associée à votre clé GPG.)
Installez gpg4Win Lite
, l'interface de ligne de commande gnupg minimum (prenez la plus récentegpg4win-vanilla-2.X.Y-betaZZ.exe
), et complétez votre CHEMIN avec le répertoire d'installation de GPG:
set PATH=%PATH%:C:\path\to\gpg
copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe
(Notez la copy
commande ' ': Git aura besoin d'un script Bash pour exécuter la commande ' gpg
'. Comme il gpg4win-vanilla-2
est livré avec gpg2.exe
, vous devez le dupliquer.)
(Assurez-vous de mettre un mot de passe pour cette clé.)
Faites confiance à cette clé
Installez le script d'assistance des informations d'identification dans un répertoire de votre %PATH%
:
cd c:\a\fodler\in\your\path
curl -o c:\prgs\bin\git-credential-netrc https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl
(Attention: le script est renommé dans Git 2.25.x / 2.26, voir ci-dessous)
(Oui, c'est un script Bash, mais il fonctionnera sur Windows car il sera appelé par Git.)
(N'oubliez pas la protocol
partie ' ': ' http
' ou ' https
' selon l'URL que vous utiliserez.)
(Vous pouvez maintenant supprimer le _netrc
fichier en ne gardant que le fichier _netrc.gpg
crypté.)
(Notez le ' /
': C:\path\to...
ne fonctionnerait pas du tout.) (Vous pouvez utiliser d'abord -v -d
pour voir ce qui se passe.)
Désormais, toute commande Git utilisant une URL HTTP (S) qui nécessite une authentification déchiffrera ce _netrc.gpg
fichier et utilisera le login / mot de passe associé au serveur que vous contactez. La première fois, GPG vous demandera la phrase secrète de votre clé GPG, pour décrypter le fichier. Les autres fois, l'agent gpg lancé automatiquement par le premier appel GPG vous fournira cette phrase secrète.
De cette façon, vous pouvez mémoriser plusieurs URL / identifiants / mots de passe dans un seul fichier et les stocker sur votre disque crypté.
Je le trouve plus pratique qu'un "cache" helper ", où vous devez vous souvenir et taper (une fois par session) un mot de passe différent pour chacun de vos services distants, pour que ce mot de passe soit mis en cache en mémoire.
Avec Git 2.26 (Q1 2020), l'exemple d'aide des informations d'identification à utiliser .netrc
a été mis à jour pour fonctionner immédiatement. Voir patch / discussion .
Voir commit 6579d93 , commit 1c78c78 (20 décembre 2019) par Denton Liu ( Denton-L
) .
(Fusionné par Junio C Hamano - gitster
- dans commit 1fd27f8 , 25 déc.2019 )
Signé par: Denton Liu
Le chemin de shebang pour l'interprète Perl en git-credential-netrc
était codé en dur.
Cependant, certains utilisateurs peuvent l'avoir situé à un emplacement différent et auraient donc dû modifier manuellement le script.
Ajoutez un .perl
préfixe au script pour le désigner comme modèle et ignorez la version générée.
Augmentez le Makefile
afin qu'il génère à git-credential-netrc
partir de git-credential-netrc.perl
, tout comme les autres scripts Perl.
Les recettes Makefile ont été volées sans vergogne contrib/mw-to-git/Makefile
.
Et:
Avec la version 2.26 (T1 2020), l'exemple d'assistance des informations d'identification pour l'utilisation de .netrc a été mis à jour pour fonctionner immédiatement.
Voir commit 6579d93 , commit 1c78c78 (20 décembre 2019) par Denton Liu ( Denton-L
) .
(Fusionné par Junio C Hamano - gitster
- dans commit 1fd27f8 , 25 déc.2019 )
Signé par: Denton Liu
Actuellement, git-credential-netrc
ne fonctionne pas en dehors d'un référentiel git. Il échoue avec l'erreur suivante:
fatal: Not a git repository: . at /usr/share/perl5/Git.pm line 214.
Cependant, il n'y a aucune raison réelle de devoir être dans un référentiel. Les assistants d'identification devraient également être en mesure de fonctionner correctement en dehors du référentiel.
Appelez la version non auto de config()
afin qu'elle git-credential-netrc
n'ait plus besoin d'être exécutée dans un référentiel.
Jeff King ( peff
) ajoute:
Je suppose que vous utilisez un cryptage gpg netrc
(sinon, vous devriez probablement simplement l'utiliser credential-store
).
Pour un accès par mot de passe "en lecture seule", je trouve que la combinaison pass
avec config comme ceci est un peu plus agréable:
[credential "https://github.com"]
username = peff
helper = "!f() { test $1 = get && echo password=`pass github/oauth`; }; f"