2076 votes

Existe-t-il un moyen de mettre en cache les informations d'identification https pour pousser les commits ?

J'ai récemment adopté la synchronisation de mes dépôts à https:// sur GitHub (en raison de problèmes de pare-feu), et un mot de passe m'est demandé à chaque fois.

Existe-t-il un moyen de mettre en cache les informations d'identification, au lieu de s'authentifier à chaque fois que git push ?

1 votes

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 le git-credential-winstore.exe (cache mémoire) qui est un peu bogué sous Windows.

2609voto

Mark Longair Points 93104

Avec Git version 1.7.9 et ultérieure

Depuis la version 1.7.9 de Git (publiée fin janvier 2012), il existe un mécanisme astucieux dans Git pour éviter d'avoir à taper votre mot de passe tout le temps pour HTTP / HTTPS, appelé aides à la reconnaissance des diplômes . (Merci à dazonic pour avoir signalé cette nouvelle fonctionnalité dans les commentaires ci-dessous).

Avec Git 1.7.9 ou plus, vous pouvez simplement utiliser l'un des assistants d'accréditation suivants :

git config --global credential.helper cache

... qui indique à Git de garder votre mot de passe en mémoire pendant (par défaut) 15 minutes. Vous pouvez définir un délai plus long avec :

git config --global credential.helper "cache --timeout=3600"

(Cet exemple a été suggéré dans le Page d'aide de GitHub pour Linux .) Vous pouvez également stocker vos informations d'identification de manière permanente si vous le souhaitez, voir les autres réponses ci-dessous.

L'aide de GitHub suggère également que si vous êtes sur Mac OS X et que vous avez utilisé Homebrew pour installer Git, vous pouvez utiliser le keystore natif de Mac OS X avec :

git config --global credential.helper osxkeychain

Pour Windows il existe une aide appelée Gestionnaire d'accréditation Git pour Windows o wincred dans msysgit .

git config --global credential.helper wincred # obsolete

Avec Git pour Windows 2.7.3 et plus (mars 2016) :

git config --global credential.helper manager

Pour Linux vous utiliseriez (en 2011) gnome-keyring (ou une autre implémentation de trousseau de clés telle que KWallet).

De nos jours (2020), ce serait (sur Linux)

Fedora

sudo dnf install git-credential-libsecret
git config --global credential.helper /usr/libexec/git-core/git-credential-libsecret

Ubuntu

sudo apt-get install libsecret-1-0 libsecret-1-dev
cd /usr/share/doc/git/contrib/credential/libsecret
sudo make
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret

Avec les versions de Git antérieures à 1.7.9

Avec les versions de Git antérieures à la 1.7.9, cette option plus sûre n'est pas disponible, et vous devrez changer l'URL que votre fichier origin utilise à distance pour inclure le mot de passe de cette manière :

https://you:password@github.com/you/example.git

... en d'autres termes avec :password après le nom d'utilisateur et avant le @ .

Vous pouvez définir une nouvelle URL pour votre origin à distance avec :

git config remote.origin.url https://you:password@github.com/you/example.git

Assurez-vous que vous utilisez https et vous devez savoir que si vous faites cela, votre mot de passe GitHub sera stocké en clair dans votre compte de messagerie. .git ce qui n'est évidemment pas souhaitable.

Avec n'importe quelle version de Git (enfin, depuis la version 0.99)

Une autre approche consiste à placer votre nom d'utilisateur et votre mot de passe dans votre dossier de candidature. ~/.netrc mais, comme pour la conservation du mot de passe dans l'URL distant, cela signifie que votre mot de passe sera stocké sur le disque en texte clair, ce qui est moins sûr et n'est pas recommandé. Cependant, si vous souhaitez adopter cette approche, ajoutez la ligne suivante à votre fichier ~/.netrc :

machine <hostname> login <username> password <password>

... remplaçant <hostname> avec le nom d'hôte du serveur, et <username> y <password> avec votre nom d'utilisateur et votre mot de passe. N'oubliez pas non plus de définir des autorisations de système de fichiers restrictives sur ce fichier :

chmod 600 ~/.netrc

Notez que sous Windows, ce fichier doit être appelé _netrc et vous devrez peut-être définir la variable d'environnement %HOME% - pour plus de détails, voir :

81 votes

Ne stockez pas votre mot de passe en texte clair. À partir de Git 1.7.9, vous pouvez utiliser des aides d'identification. git config --global credential.helper osxkeychain sur OS X. Pour les autres systèmes d'exploitation, voir aide.github.com/articles/set-up-git

6 votes

Pour information, le trousseau osx fait partie du code source de base GIT, ce n'est pas un composant exclusif de Brew ou MacPorts ou de n'importe quelle autre mode du mois. Et vous n'avez même pas besoin de construire git à partir de zéro - il suffit de cd contrib/credential/osxkeychain/ et de lancer make.

0 votes

Le trousseau de clés osx est-il seulement pour https ou est-ce que cela fonctionne également lorsque l'on utilise ssh urls des dépôts + clés ?

780voto

Giri Alwar Points 2011

Vous pouvez également demander à Git de stocker vos informations d'identification de manière permanente en utilisant la méthode suivante :

git config credential.helper store

Remarque : Bien que cela soit pratique, Git stockera vos informations d'identification en clair dans le fichier un fichier local (.git-credentials) sous votre répertoire de projet (voir ci-dessous pour le répertoire "home"). Si vous n'aimez pas cela, supprimez ce fichier et passez à l'utilisation de l'option cache.

Si vous voulez que Git recommence à vous demander les informations d'identification à chaque fois qu'il doit se se connecter au référentiel distant, vous pouvez exécuter cette commande :

git config --unset credential.helper

Pour stocker les mots de passe dans .git-credentials dans votre %HOME% par opposition au répertoire du projet : utilisez l'option --global drapeau

git config --global credential.helper store

7 votes

Sous Windows, vous pouvez télécharger un utilitaire d'aide qui configure les choses de manière à stocker une version cryptée de votre mot de passe GIT dans le magasin crédité de Windows, cf. confluence.atlassian.com/display/STASH/

80 votes

J'ai découvert que je devais spécifier --global ou il essayait de stocker les paramètres dans le référentiel actuel : git config --global credential.helper store

6 votes

Pourquoi faire le cache au lieu de stocker de façon permanente ? Partage d'ordinateurs ou autre ?

117voto

VonC Points 414372

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).

  • Créez ou importez une clé GPG, et faites-lui confiance :

    gpgp --import aKey
    # or
    gpg --gen-key

(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).

  • Faire un fichier _netrc en texte clair

    machine a_server.corp.com
    login a_login
    password a_password
    protocol https
    
    machine a_server2.corp.com
    login a_login2
    password a_password2
    protocol https

(N'oubliez pas le ' protocol partie : http ou https ' selon l'URL que vous utiliserez).

  • Cryptez ce fichier :

    gpg -e -r a_recipient _netrc

(Vous pouvez maintenant supprimer le site _netrc en ne conservant que le _netrc.gpg chiffré).

  • Utilisez ce fichier crypté :

    git config --local credential.helper "netrc -f C:/path/to/_netrc.gpg -v"

(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)

contrib/credential/netrc : faire PERL_PATH configurable

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)

contrib/credential/netrc : travail en dehors d'un repo

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

J'essaie la même chose sous linux git config --local credential.helper "netrc -f /home/me/.netrc.gpg -v -d" et j'obtiens "git : 'credential-netrc' n'est pas une commande git. voir 'git --help'".

4 votes

@sunny C'est ce que le curl -o c:\prgs\bin\git-credential-netrc https://raw.github.com/git/git/master/contrib/credential/net‌​rc/git-credential-ne‌​trc est pour : vous devez copier le git-credential-netrc n'importe où dans votre chemin ( $PATH ), afin que git soit capable d'appeler ' credential-netrc '.

0 votes

Eh bien, le _netrc n'a pas fonctionné pour moi sur un Windows 7 PC, mais le .netrc a travaillé pour youtube-dl avec le --netrc qui lui est passé.

45voto

wortwart Points 87

Il existe un moyen simple et traditionnel de stocker les informations d'identification des utilisateurs dans une URL HTTPS :

https://user:password@github.com/...

Vous pouvez changer l'URL avec git remote set-url <remote-repo> <URL>

L'inconvénient évident de cette approche est que vous devez stocker le mot de passe en texte clair. Vous pouvez toujours vous contenter de saisir le nom d'utilisateur ( https://user@github.com/... ), ce qui vous évitera au moins la moitié des tracas.

Vous préférerez peut-être passer en SSH ou utiliser le logiciel client GitHub.

2 votes

Le nom d'utilisateur/mot de passe peut devoir être encodé, cf. stackoverflow.com/a/34611311/3906760

23voto

Ben Points 329

Je n'ai pas tout de suite compris que je devais d'abord télécharger l'assistant ! J'ai trouvé le téléchargement de credential.helper à l'adresse suivante Authentification permanente avec les dépôts Git d'Atlassian .

Citation :

Suivez ces étapes si vous souhaitez utiliser Git avec la mise en cache des informations d'identification sous OS X :

Téléchargez le binaire git-credential-osxkeychain.

Exécutez la commande ci-dessous pour vous assurer que le binaire est exécutable :

chmod a+x git-credential-osxkeychain

Mettez-le dans le répertoire /usr/local/bin .

Exécutez la commande ci-dessous :

git config --global credential.helper osxkeychain

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X