TLDR ; Utilisez un Fichier netrc crypté avec Git 1.8.3+. .
La sauvegarde d'un mot de passe pour l'URL HTTPS d'un dépôt Git est possible grâce à une commande ~/.netrc
(Unix) ou %HOME%/_netrc
(notez le _
) sous Windows.
Mais : Ce fichier stockerait votre mot de passe en texte clair.
Solution : Crypter ce fichier avec GPG (GNU Privacy Guard) et faire en sorte que Git le déchiffre à 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 chiffré. .netrc
fichier.
Ver commit 786ef50 , commettre f07eeed (12 mai 2018) par Luis Marsano (``) .
(fusionné par Junio C Hamano -- gitster
-- en commettre 017b7c5 , 30 mai 2018)
git-credential-netrc
: accepter gpg
option
git-credential-netrc
était codé en dur pour être décrypté avec ' gpg
indépendamment de l'option gpg.program.
C'est un problÃ?me sur les distributions comme Debian qui appellent GnuPG moderne autrement, comme ' gpg2
'
Instructions étape par étape pour Windows
Avec Windows :
(Git a un gpg.exe
dans sa distribution, mais l'utilisation d'une installation GPG complète inclut un fichier d'aide à l'installation. gpg-agent.exe
qui mémorisera votre phrase de passe associée à votre clé GPG).
-
Installer gpg4Win Lite
l'interface minimale de la ligne de commande de gnupg (prenez le fichier le plus récent gpg4win-vanilla-2.X.Y-betaZZ.exe
), et complétez votre PATH 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 le ' copy
' : Git aura besoin d'un script Bash pour exécuter la commande ' gpg
'. Puisque gpg4win-vanilla-2
est livré avec gpg2.exe
vous devez le dupliquer).
(Assurez-vous de mettre une phrase de passe sur cette clé).
-
Faites confiance à cette clé
-
Installez l'assistant d'accréditation script dans un répertoire au sein 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 de Bash, mais il fonctionnera sous Windows puisqu'il sera appelé par Git).
(N'oubliez pas le ' protocol
partie : http
ou https
' selon l'URL que vous utiliserez).
(Vous pouvez maintenant supprimer le site _netrc
en ne conservant que le _netrc.gpg
chiffré).
(Notez le ' /
' : C:\path\to...
ne fonctionnerait pas du tout). (Vous pouvez utiliser au début -v -d
pour voir ce qui se passe).
Dorénavant, toute commande Git utilisant une URL HTTP(S) qui requiert une authentification décryptera cette URL. _netrc.gpg
et utilisez le login/mot de passe associé au serveur que vous contactez. La première fois, GPG vous demandera la phrase de passe de votre clé GPG, pour décrypter le fichier. Les autres fois, l'agent gpg lancé automatiquement par le premier appel GPG fournira cette phrase de passe pour vous.
De cette façon, vous pouvez mémoriser plusieurs URLs/logins/mots de passe dans un seul fichier, et faites-le stocker sur votre disque de manière cryptée.
Je trouve cela 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 ledit mot de passe soit mis en cache en mémoire.
Avec Git 2.26 (Q1 2020), l'aide d'accréditation type pour l'utilisation de .netrc
a été mis à jour pour fonctionner dès la sortie de la boîte. Voir patch/discussion .
Ver commettre 6579d93 , commettre 1c78c78 (20 déc. 2019) par Denton Liu ( Denton-L
) .
(fusionné par Junio C Hamano -- gitster
-- en commit 1fd27f8 , 25 déc. 2019)
Signé par : Denton Liu
Le chemin shebang pour l'interpréteur Perl en git-credential-netrc
était codée en dur.
Cependant, certains utilisateurs peuvent l'avoir situé à un endroit différent et donc, auraient dû modifier manuellement le script.
Ajouter un .perl
au préfixe script. pour le désigner comme un modèle et ignorer la version générée.
Augmentez le Makefile
afin qu'il génère git-credential-netrc
de git-credential-netrc.perl
comme les autres scripts Perl.
Les recettes du Makefile ont été volées sans vergogne de contrib/mw-to-git/Makefile
.
Et :
Avec la version 2.26 (T1 2020), l'aide d'identification de l'échantillon pour l'utilisation de .netrc a été mise à jour pour fonctionner dès le départ.
Ver commettre 6579d93 , commettre 1c78c78 (20 déc. 2019) par Denton Liu ( Denton-L
) .
(fusionné par Junio C Hamano -- gitster
-- en commit 1fd27f8 , 25 déc. 2019)
Signé par : Denton Liu
Actuellement, git-credential-netrc
ne fonctionne pas en dehors d'un dépôt git. Il échoue avec l'erreur suivante :
fatal: Not a git repository: . at /usr/share/perl5/Git.pm line 214.
Il n'y a pas de raison réelle pour laquelle il faut être dans un référentiel, cependant. Les aides d'accréditation devraient pouvoir fonctionner sans problème en dehors du référentiel également.
Appelez la version non-soi de config()
de sorte que git-credential-netrc
n'a plus besoin d'être exécuté dans un référentiel.
Jeff King ( peff
) ajoute :
Je suppose que vous utilisez un système de cryptage gpg. netrc
(si non, vous devriez probablement juste utiliser credential-store
).
Pour un accès en "lecture seule" par mot de passe, je trouve la combinaison de pass
avec une configuration comme celle-ci est un peu plus agréable :
[credential "https://github.com"]
username = peff
helper = "!f() { test $1 = get && echo password=`pass github/oauth`; }; f"
1 votes
Voir aussi superuser.com/questions/199507/
2 votes
Vous pouvez maintenant utiliser un assistant d'accréditation pour crypter l'adresse de l'utilisateur.
_netrc
contenant vos informations d'identification. Voir ma réponse ci-dessous . J'ai trouvé plus sûr que legit-credential-winstore.exe
(cache mémoire) qui est un peu bogué sous Windows.4 votes
Voir aussi Le push Git nécessite un nom d'utilisateur et un mot de passe y Git me demande toujours un mot de passe .
0 votes
git-credential-winstore
a fonctionné le mieux pour Windows. Qu'est-ce qui est buggé ? La configuration de ssh est l'option préférée, bien que je l'aie fait plusieurs fois, elle est beaucoup plus sujette aux erreurs et parfois ne fonctionne tout simplement pas lorsque vous devez vous connecter à plusieurs hôtes.2 votes
Par "certificat SSH", je suppose que vous voulez dire "clé privée SSH".
0 votes
Une alternative sécurisée et conviviale à SSH ou aux jetons d'accès personnels est OAuth via Git Credential Manager, voir ma réponse. stackoverflow.com/a/71286601/284795