web-dev-qa-db-fra.com

Existe-t-il un moyen de mettre en cache les informations d'identification GitHub pour l'envoi des commits?

Je suis récemment passé à la synchronisation de mes référentiels sur https: // sur GitHub (en raison de problèmes de pare-feu), et il demande un mot de passe à 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?

1786
Zepplock

Avec Git version 1.7.9 et ultérieure

Depuis Git 1.7.9 (publié fin janvier 2012), il existe un mécanisme simple dans Git pour éviter de devoir taper votre mot de passe tout le temps pour HTTP/HTTPS, appelé aide-identifiants . (Merci à dazonic pour avoir signalé cette nouvelle fonctionnalité dans les commentaires ci-dessous.)

Avec Git 1.7.9 ou une version ultérieure, vous pouvez simplement utiliser l'un des assistants d'identification suivants:

git config --global credential.helper cache

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

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

(Cet exemple a été suggéré dans = page d'aide 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 utilisez Mac OS X et que vous utilisez Homebrew pour installer Git, vous pouvez utiliser le magasin de clés natif de Mac OS X avec:

git config --global credential.helper osxkeychain

Pour Windows, il existe un assistant appelé Git Credential Manager for Windows ou gagné dans msysgit .

git config --global credential.helper wincred # obsolete

Avec Git for Windows 2.7.3 + (mars 2016):

git config --global credential.helper manager

Pour Linux, vous pouvez tilisez gnome-keyring (ou une autre implémentation de trousseau de clés telle que KWallet).

Avec les versions de Git antérieures à la 1.7.9

Avec les versions de Git antérieures à la version 1.7.9, cette option plus sécurisée n'est pas disponible et vous devez modifier l'URL utilisée par votre télécommande Origin pour inclure le mot de passe de cette manière:

https://you:[email protected]/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 télécommande Origin avec:

git config remote.Origin.url https://you:[email protected]/you/example.git

Assurez-vous que vous utilisez https, et sachez que si vous le faites, votre mot de passe GitHub sera stocké en texte clair dans votre répertoire .git, ce qui est évidemment indésirable.

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

Une autre approche consiste à mettre votre nom d'utilisateur et votre mot de passe dans votre fichier ~/.netrc, bien que, comme pour conserver le mot de passe dans l'URL distante, cela signifie que votre mot de passe sera stocké sur le disque en texte brut et sera donc moins sécurisé. et non recommandé. Toutefois, si vous souhaitez adopter cette approche, ajoutez la ligne suivante à votre ~/.netrc:

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

... remplace <hostname> par le nom d'hôte du serveur, et <username> et <password> par votre nom d'utilisateur et votre mot de passe. Pensez également à définir des autorisations de système de fichiers restrictives sur ce fichier:

chmod 600 ~/.netrc

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

2301
Mark Longair

Vous pouvez également demander à Git de stocker vos informations d'identification de manière permanente à l'aide des éléments suivants:

git config credential.helper store

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

Si vous voulez que Git recommence à vous demander des informations d'identification chaque fois qu'il doit 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 répertoire %HOME% par opposition au répertoire du projet: utilisez l'indicateur --global.

git config --global credential.helper store
693
Giri Alwar

TLDR; Utilisez un fichier netrc chiffré avec Git 1.8.3 +.

L'enregistrement d'un mot de passe pour une URL HTTPS de référentiel Git est possible avec un _~/.netrc_ (Unix) ou un _%HOME%/_netrc_ (notez le ___) sous Windows.

Mais: Ce fichier stockera votre mot de passe en texte brut.

Solution: Cryptez ce fichier avec GPG (GNU Privacy Guard) , et demandez à Git de le décrypter chaque fois qu'un mot de passe est nécessaire (pour Push/pull/fetch/clone opération).


Remarque: avec Git 2.18 (T2 2018), vous pouvez maintenant personnaliser le GPG utilisé pour déchiffrer le fichier crypté _.netrc_.

Voir commit 786ef5 , commit f07eeed (12 mai 2018) par Luis Marsano (``) .
(Fusionné par Junio ​​C Hamano - gitster - dans commit 017b7c5 , 30 mai 2018)

_git-credential-netrc_: accepte l'option gpg

_git-credential-netrc_ était codé en dur à déchiffrer avec 'gpg' quelle que soit l'option gpg.program.
Ceci est un problème sur les distributions comme Debian qui appellent GnuPG moderne, quelque chose d'autre, 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 minimale de gnupg (prenez le 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 la commande 'copy': Git aura besoin d'un script Bash pour exécuter la commande 'gpg'.). Puisque _gpg4win-Vanilla-2_ est fourni 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 secrète sur cette clé.)

  • Faites confiance à cette clé

  • Installez le script auxiliaire d'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
    _

(Oui, c'est un script Bash, mais cela 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 la partie 'protocol': 'http' ou 'https' en fonction de l'URL que vous utiliserez.)

  • Crypter ce fichier:

    _gpg -e -r a_recipient _netrc
    _

(Vous pouvez maintenant supprimer le fichier __netrc_, en ne conservant que le fichier __netrc.gpg_ crypté.)

  • Utilisez ce fichier crypté:

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

(Notez que '_/_': _C:\path\to..._ ne fonctionne pas du tout.) (Vous pouvez utiliser au début _-v -d_ pour voir ce qui se passe.)

Désormais, toute commande Git utilisant une URL HTTP (S) nécessitant une authentification déchiffrera ce fichier __netrc.gpg_ et utilisera le nom d'utilisateur/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échiffrer le fichier. Les autres fois, l’agent-gpg lancé automatiquement ​​lors du premier appel GPG vous fournira ce mot de passe.

De cette façon, vous pouvez mémoriser plusieurs URL/identifiants/mots de passe dans un seul fichier et le faire stocker sur votre disque.
Je trouve cela plus pratique qu'un "cache" helper ", dans lequel vous devez vous rappeler et taper (une fois par session) un mot de passe différent pour chacun de vos services distants, afin que ledit mot de passe soit mis en cache en mémoire.

94
VonC

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

https://user:[email protected]/...

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 brut. Vous pouvez toujours simplement entrer le nom d'utilisateur (https://[email protected]/...), ce qui vous évitera au moins la moitié du temps perdu.

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

40
wortwart

Utilisez un magasin d'informations d'identification.

Pour Git 2.11+ sur OS X et Linux , tiliser le magasin d'identifiants intégré de Git :

git config --global credential.helper libsecret

Pour msysgit 1.7.9+ sur Windows :

git config --global credential.helper wincred

Pour Git 1.7.9+ sur OS X, utilisez:

git config --global credential.helper osxkeychain
39
roo2

Vous pouvez simplement utiliser

_git config credential.helper store
_

La prochaine fois que vous entrerez un mot de passe avec pull ou push, il sera stocké dans le fichier .git-credentials sous forme de texte brut (un peu non sécurisé, mais placez-le simplement dans un dossier protégé).

Et c'est tout, comme indiqué sur cette page:

git-credential-store

37
sgoran

Incluez simplement les identifiants de connexion dans l'URL:

git remote rm Origin
git remote add Origin https://username:[email protected]/path/to/repo.git

Note: Je ne recommande pas cette méthode, mais si vous êtes dans Rush et que rien d'autre ne fonctionne, vous pouvez utiliser cette méthode.

23
Tarun Gupta

Il n'était pas immédiatement évident pour moi que je devais télécharger le programme d'assistance en premier! J'ai trouvé le téléchargement de credential.helper à l'adresse authentification permanente d'Atlassian avec les référentiels Git .

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 fichier 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
22
Ben

Sur une installation GNU/Linux, un ~/.netrc fonctionne plutôt bien aussi:

$ cat ~/.netrc
machine github.com login lot105 password howsyafather

Cela peut dépendre des bibliothèques réseau utilisées par Git pour le transport HTTPS .

19
helloPiers

Pour Windows, vous pouvez utiliser le plugin Git Credential Manager (GCM). Il est actuellement maintenu par Microsoft. Ce qui est bien, c’est que le mot de passe est enregistré dans la base de données d’identifications Windows, et non en texte brut.

Il y a un programme d'installation sur le page des versions du projet. Cela installera également la version officielle de Git for Windows avec le gestionnaire de données d'identification intégré. Il permet authentification à deux facteurs pour GitHub (et d'autres serveurs). Et a une interface graphique pour la connexion initiale.

Pour les utilisateurs de Cygwin (ou les utilisateurs utilisant déjà Git pour Windows officiel), vous préférerez peut-être l’installation manuelle. Téléchargez le package Zip à partir de la page releases . Extrayez le package, puis exécutez le fichier install.cmd. Cela installera dans votre dossier ~/bin. (Assurez-vous que votre répertoire ~/bin se trouve dans votre CHEMIN.) Vous le configurez ensuite à l'aide de cette commande:

git config --global credential.helper manager

Git exécutera alors le git-credential-manager.exe lors de l'authentification sur un serveur.

16
Nadeem Khedr

Si vous ne souhaitez pas stocker votre mot de passe en texte brut, comme le dit Mark, vous pouvez utiliser une URL GitHub différente pour la récupération de données que pour le transfert. Dans votre fichier de configuration, sous [remote "Origin"]:

url = git://github.com/you/projectName.git
pushurl = [email protected]:you/projectName.git

Il vous demandera quand même un mot de passe lorsque vous appuierez, mais pas lorsque vous récupérerez, du moins pour les projets open source.

12
MatrixFrog

OAuth

Vous pouvez créer votre propre jeton d'API personnelle ( OAuth ) et l'utiliser de la même manière que vous utiliseriez vos informations d'identification normales (à l'adresse: /settings/tokens). Par exemple:

git remote add fork https://[email protected]/foo/bar
git Push fork

.netrc

Une autre méthode consiste à configurer votre utilisateur/mot de passe dans ~/.netrc (_netrc sous Windows), par exemple.

machine github.com
login USERNAME
password PASSWORD

Pour HTTPS, ajoutez la ligne supplémentaire:

protocol https

Un assistant d'identification

Pour mettre en cache votre mot de passe GitHub dans Git , lorsque vous utilisez HTTPS, vous pouvez utiliser un assistant d'identification pour indiquer à Git de se rappeler de votre nom d'utilisateur GitHub et mot de passe chaque fois qu'il parle à GitHub.

  • Mac: git config --global credential.helper osxkeychain (osxkeychain helper est requis),
  • Windows: git config --global credential.helper wincred
  • Linux et autres: git config --global credential.helper cache

Apparenté, relié, connexe:

11
kenorb

Vous pouvez utiliser des assistants d'identification.

git config --global credential.helper 'cache --timeout=x'

x est le nombre de secondes.

9
Charan

Après avoir cloné le référentiel repo, vous pouvez éditer repo/.git/config et ajouter une configuration, comme ci-dessous:

[user]
    name = you_name
    password = you_password
[credential]
    helper = store

Ensuite, on ne vous demandera plus username et password.

8
Xiaorong Liao

Je sais que ce n'est pas une solution sécurisée, mais vous avez parfois besoin d'une solution simple, sans rien installer d'autre. Et comme helper = store ne fonctionnait pas pour moi, j'ai créé un assistant factice:

Créez un script et mettez-le dans le dossier bin de votre utilisateur, ici nommé credfake, ce script fournira votre nom d'utilisateur et votre mot de passe:

#!/bin/bash
while read line
do
  echo "$line"
done < "/dev/stdin"
echo username=mahuser
echo password=MahSecret12345

le rendre exécutable:

chmod u+x /home/mahuser/bin/credfake

puis configurez-le dans git:

git config --global credential.helper /home/mahuser/bin/credfake

(ou utilisez-le sans --global pour le repo uniquement)

et - voilá - git utilisera cet utilisateur + mot de passe.

7
bebbo

Un jeton d'authentification doit être utilisé à la place du mot de passe du compte. Accédez aux paramètres/applications GitHub, puis créez un jeton d'accès personnel. Le jeton peut être utilisé de la même manière qu'un mot de passe.

Le jeton est destiné à permettre aux utilisateurs de ne pas utiliser le mot de passe du compte pour le travail de projet. Utilisez le mot de passe uniquement pour les tâches d'administration, comme la création de nouveaux jetons ou la révocation d'anciens jetons.


Au lieu d'un jeton ou d'un mot de passe qui accorde à un utilisateur l'accès complet à un compte GitHub, une clé de déploiement spécifique au projet peut être utilisée pour accorder l'accès à un référentiel de projet unique. Un projet Git peut être configuré pour utiliser cette clé différente dans les étapes suivantes lorsque vous pouvez toujours accéder à d'autres comptes ou projets Git avec vos informations d'identification normales:

  1. Ecrivez un fichier de configuration SSH contenant la Host, IdentityFile pour la clé de déploiement, peut-être le UserKnownHostsFile, et peut-être le User (bien que je pense que vous n'en avez pas besoin ).
  2. Ecrivez un script shell wrapper SSH qui est pratiquement ssh -F /path/to/your/config $*
  3. Ajoutez le préfixe GIT_SSH=/path/to/your/wrapper devant votre commande Git normale. Ici, le git remote (Origine) doit utiliser le format [email protected]:user/project.git.
6
minghua

Il est préférable d'utiliser les informations d'identification pour la sécurité, mais vous pouvez les conserver pendant un certain temps en utilisant le cache:

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

Vos informations d'identification seront enregistrées pendant 3600 secondes.

6
Sarvar Nishonboev

Les choses sont un peu différentes si vous utilisez authentification à deux facteurs tel que je suis. Comme je n’ai pas trouvé de bonne réponse ailleurs, je vais en coller une ici pour pouvoir la retrouver plus tard.

Si vous utilisez une authentification à deux facteurs, alors spécifier un nom d'utilisateur/mot de passe ne fonctionnera même pas - l'accès sera refusé. Mais vous pouvez utiliser un jeton d'accès aux applications et utiliser l'assistant de gestion des informations d'identification de Git pour le mettre en cache pour vous. Voici les liens pertinents:

Et je ne me souviens pas où j'ai vu cela, mais lorsqu'on vous demande votre nom d'utilisateur, c'est là que vous collez le jeton d'accès à l'application. Ensuite, laissez le mot de passe vide. Cela a fonctionné sur mon Mac.

5
JnBrymn

Habituellement, vous avez une URL distante, quelque chose comme ça,

git remote -v

Origin    https://gitlab.com/username/Repo.git (fetch)
Origin    https://gitlab.com/username/Repo.git (Push)

Si vous voulez ignorer le nom d'utilisateur et le mot de passe lorsque vous utilisez git Push, essayez ceci:

 git remote set-url Origin https://username:[email protected]/username/Repo.git

Je viens d'ajouter la même URL (avec les détails de l'utilisateur, y compris le mot de passe) à Origin.

NOTE: Cela ne fonctionne pas si le nom d'utilisateur est un identifiant de messagerie.

git remote -v

Origin    https://username:[email protected]/username/Repo.git (fetch)
Origin    https://username:[email protected]/username/Repo.git (Push)
4
Nayagam

Cela fonctionne pour moi j'utilise Windows 10

git config --global credential.helper wincred
3
Mostafa Nawara

J'ai eu ma réponse de gitcredentials (7) Manual Page. Dans mon cas, je n’ai pas de cache d’authentification dans mon installation de Windows; J'utilise credential-store.

Après avoir utilisé credential-store, le nom d'utilisateur/mot de passe est stocké dans le fichier [dossier utilisateur]/.git-credentials. Pour supprimer le nom d'utilisateur/mot de passe, supprimez simplement le contenu du fichier.

3
Mike Lin

La composer documentation mentionne que vous pouvez l'empêcher d'utiliser l'API GitHub, de sorte qu'elle se comporte comme git clone:

Si vous définissez la clé no-api sur true sur un référentiel GitHub, il clonera le référentiel comme il le ferait avec tout autre référentiel Git au lieu d'utiliser l'API GitHub. Mais contrairement à l’utilisation directe du pilote git, composer tentera toujours d’utiliser les fichiers Zip de GitHub.

Donc, la section ressemblerait à ceci:

"repositories": [
    {
        "type": "vcs",
        "no-api": true,
        "url": "https://github.com/your/repo"
    }
],

Gardez à l'esprit que l'API existe pour une raison. Donc, cela devrait être une méthode de dernier recours en ce qui concerne la charge accrue sur github.com.

2
sebastianwagner

Vous éditez également le fichier bashrc et y ajoutez un script.

Cela vous demanderait votre mot de passe une fois au démarrage de Git, puis vous en souviendriez jusqu'à ce que vous vous déconnectiez.

SSH_ENV=$HOME/.ssh/environment
  
# Start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."

    # Spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}
  
if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
   ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
      start_agent;
  }
else
    start_agent;
fi
2
ThePatelGuy