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
?
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 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.
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:
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
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'optiongpg
_
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
_'
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é.)
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.
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.
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
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:
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.
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
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 .
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.
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.
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
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.
git config --global credential.helper osxkeychain
(osxkeychain helper
est requis),git config --global credential.helper wincred
git config --global credential.helper cache
Apparenté, relié, connexe:
Vous pouvez utiliser des assistants d'identification.
git config --global credential.helper 'cache --timeout=x'
où x
est le nombre de secondes.
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
.
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.
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:
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 ).ssh -F /path/to/your/config $*
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
.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.
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.
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)
Cela fonctionne pour moi j'utilise Windows 10
git config --global credential.helper wincred
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.
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
surtrue
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 pilotegit
, 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.
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