6.6 KiB
Enregistrer vos identifiants Git
Lorsque vous travaillez avec un dépôt Git distant en HTTPS (GitHub, GitLab, Bitbucket…), Git vous demande de vous authentifier à chaque opération réseau (push, pull, fetch…). Pour éviter de saisir vos identifiants à chaque fois, Git propose un système de credential helpers qui mémorisent ces informations de manière plus ou moins sécurisée.
Important : la fin du mot de passe sur les principales plateformes. Depuis août 2021, GitHub n'accepte plus le mot de passe de votre compte pour les opérations Git en HTTPS. Bitbucket Cloud a fait de même. Vous devez utiliser à la place :
- un Personal Access Token (PAT), que vous générez depuis les paramètres de votre compte ;
- ou une clé SSH (l'URL du dépôt commence alors par
git@…au lieu dehttps://) ;- ou un flux OAuth géré automatiquement par Git Credential Manager (voir plus bas).
Dans tout ce qui suit, là où on parle de « mot de passe », il faut comprendre « PAT » pour ces plateformes.
Configurer votre identité (≠ vos identifiants)
Avant toute chose, ne confondez pas votre identité (le nom et l'e-mail inscrits dans chaque commit) avec vos identifiants (ce qui sert à vous authentifier auprès du serveur).
L'identité se configure ainsi :
git config --global user.name "Votre nom"
git config --global user.email "vous@exemple.com"
Il n'existe pas de propriété
user.passworddans Git. Une commande commegit config --global user.password "…"n'aura aucun effet sur l'authentification ; elle ne fera qu'écrire une clé inutile dans votre~/.gitconfig. Pour stocker un mot de passe ou un token, utilisez un credential helper, décrit ci-dessous.
Le mécanisme des credential helpers
Un credential helper est un petit programme externe que Git interroge pour obtenir vos identifiants. La configuration générale est :
git config --global credential.helper <helper>
Plusieurs helpers existent, du moins au plus sécurisé.
cache — mémoire vive, temporaire
cache garde vos identifiants en mémoire pendant une durée limitée (15 minutes par défaut), sans jamais les écrire sur le disque. Pratique sur un serveur de déploiement, par exemple.
git config --global credential.helper cache
Pour augmenter la durée — par exemple à une heure — le timeout se passe en argument au helper, pas comme clé de configuration séparée :
git config --global credential.helper 'cache --timeout=3600'
store — fichier en clair sur le disque
git config --global credential.helper store
store enregistre vos identifiants de façon permanente dans ~/.git-credentials. Attention : ce fichier est en clair. N'importe qui ayant accès à votre compte utilisateur (ou à une sauvegarde non chiffrée) peut le lire. À éviter sauf cas très spécifiques (machine isolée, token à portée réduite et lecture seule, etc.).
macOS — osxkeychain
Sur macOS, Git est livré avec un helper qui stocke vos identifiants dans le trousseau du système (Keychain), chiffré et déverrouillé avec votre session :
git config --global credential.helper osxkeychain
C'est généralement configuré par défaut sur les installations récentes.
Windows — wincred / Git Credential Manager
Git pour Windows inclut Git Credential Manager (GCM), qui stocke les identifiants dans le Windows Credential Manager et gère OAuth pour les principales plateformes. Aucune configuration n'est nécessaire dans la plupart des cas : GCM est activé par défaut.
Linux — libsecret (et non plus gnome-keyring)
L'ancien helper git-credential-gnome-keyring est déprécié. Le helper recommandé aujourd'hui sur les bureaux Linux est libsecret, qui parle au service Secret Service (GNOME Keyring, KWallet via un pont, etc.) via une API standardisée.
Sur Fedora / RHEL, un binaire est généralement déjà présent :
git config --global credential.helper /usr/libexec/git-core/git-credential-libsecret
Sur Debian / Ubuntu, le helper est livré sous forme de code source qu'il faut compiler une fois (c'est rapide) :
sudo apt install make gcc libsecret-1-0 libsecret-1-dev libglib2.0-dev
sudo make --directory=/usr/share/doc/git/contrib/credential/libsecret
git config --global credential.helper \
/usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
Lors du prochain git push ou git clone, Git vous demandera vos identifiants une fois, puis les stockera dans le trousseau du système. Les opérations suivantes seront authentifiées automatiquement.
Git Credential Manager (GCM) — solution moderne multiplateforme
Git Credential Manager est le helper officiellement recommandé par GitHub aujourd'hui. Il fonctionne sur Windows, macOS et Linux, et gère en plus l'authentification OAuth (ouverture d'un navigateur, 2FA, jetons rafraîchis automatiquement) pour GitHub, GitLab, Bitbucket et Azure DevOps.
Sur Windows et macOS, il est généralement installé avec Git. Sur Linux, il faut le télécharger depuis la page des releases du projet puis le configurer :
git-credential-manager configure
Sur Linux, GCM peut être adossé à libsecret pour le stockage :
git config --global credential.credentialStore secretservice
Alternative : GitHub CLI
Si vous utilisez GitHub, l'outil gh configure automatiquement Git pour utiliser vos identifiants GitHub :
gh auth login
gh se charge du token, du helper, et de tout le reste.
Et les clés SSH ?
Pour de nombreux développeurs, la solution la plus simple reste d'utiliser une clé SSH plutôt qu'HTTPS. Vous générez une paire de clés (ssh-keygen -t ed25519), vous ajoutez la clé publique sur votre compte GitHub/GitLab, et vous utilisez les URLs git@…. Plus de question de mot de passe ni de token à renouveler.
Récapitulatif
| Helper | Plateforme | Sécurité | Commentaire |
|---|---|---|---|
cache |
Toutes | Bonne (mémoire seulement) | Temporaire, à réauthentifier régulièrement |
store |
Toutes | Faible (fichier en clair) | À éviter |
osxkeychain |
macOS | Bonne (Keychain chiffré) | Par défaut sur macOS |
wincred / GCM |
Windows | Bonne | Par défaut sur Git for Windows |
libsecret |
Linux | Bonne (trousseau système) | Remplace gnome-keyring |
| GCM | Windows / macOS / Linux | Très bonne (OAuth, 2FA) | Recommandé par GitHub |
| Clé SSH | Toutes | Très bonne | Alternative à HTTPS |