Aller au contenu
Développement medium

Stockage des credentials Git

12 min de lecture

Git Credential Manager (GCM) est le helper recommandé : il stocke vos identifiants de façon sécurisée dans le trousseau de clés de l'OS. Mais Git propose aussi des helpers plus simples (cache, store) et vous pouvez opter pour des clés SSH au lieu de tokens HTTPS. Ce guide couvre tous les mécanismes d'authentification Git.

Prérequis : Protocoles Git et Installer et configurer Git.

  • Configurer le helper adapté à votre OS (cache, store, manager)
  • Comprendre les différences entre les helpers et leurs niveaux de sécurité
  • Gérer les tokens HTTPS et les clés SSH selon la plateforme
  • Éviter de retaper vos credentials à chaque opération réseau

Sans helper, Git demande le nom d'utilisateur et le mot de passe (ou token) à chaque push, pull et fetch via HTTPS. Un credential helper stocke ces identifiants pour les réutiliser automatiquement.

Stocke les identifiants en mémoire pendant 15 minutes (par défaut). Rien n'est écrit sur le disque :

Fenêtre de terminal
git config --global credential.helper cache
# Augmenter la durée à 1 heure (3600 secondes)
git config --global credential.helper 'cache --timeout=3600'

Idéal pour : sessions de travail courtes, machines partagées.

Enregistre les identifiants en clair dans ~/.git-credentials :

Fenêtre de terminal
git config --global credential.helper store

Le fichier contient :

https://user:token@github.com

Intégré avec le Trousseau d'accès macOS (Keychain) :

Fenêtre de terminal
git config --global credential.helper osxkeychain

Les identifiants sont stockés de façon chiffrée et accessibles via l'app Trousseau d'accès.

La solution recommandée. GCM fonctionne sur Linux, macOS et Windows. Il utilise le trousseau de clés natif de l'OS et prend en charge l'authentification OAuth/SAML pour GitHub, GitLab, Azure DevOps et Bitbucket.

Sur macOS et Windows, l'installation passe par un canal déjà signé : le cask Homebrew et l'installeur de Git for Windows. Sur Linux, la documentation du projet recommande le paquet .deb publié sur la page des releases GitHub, et fournit une procédure de vérification de signature avec debsig-verify. Téléchargez donc le paquet, vérifiez-le, puis installez-le : ne redirigez jamais un script d'installation directement dans un shell.

Fenêtre de terminal
brew install --cask git-credential-manager
git-credential-manager configure
Fenêtre de terminal
git config --global credential.helper manager
# Vérifier
git config --global credential.helper
# manager

GCM ouvre automatiquement le navigateur pour l'authentification OAuth au premier push/pull. Le token obtenu est stocké dans le trousseau de clés de l'OS.

La ligne qui justifie à elle seule le choix de GCM est OAuth / SAML. Sur une organisation GitHub ou GitLab protégée par du SSO d'entreprise, un simple token personnel est souvent refusé tant qu'il n'a pas été autorisé auprès du fournisseur d'identité ; GCM déclenche le parcours d'authentification complet dans le navigateur et récupère un jeton déjà valide. La ligne Stockage sécurisé indique quel magasin est utilisé selon l'OS, et rappelle que sur Linux ce choix vous revient.

FonctionnalitéDétail
OAuth / SAMLAuthentification via navigateur
Stockage sécuriséKeychain (macOS), Secret Service (Linux), Credential Manager (Windows)
Multi-comptesGestion de plusieurs comptes par plateforme
ProxySupport des proxies d'entreprise
PlateformesGitHub, GitLab, Azure DevOps, Bitbucket

Il n'y a pas de bon et de mauvais choix ici, mais deux modèles de révocation différents. Une clé SSH est un secret durable que vous devez penser à retirer des plateformes le jour où le poste change de mains ; un token HTTPS porte une date d'expiration et un périmètre de permissions, donc il se périme tout seul. Les lignes Pare-feu et Expiration sont celles qui tranchent le plus souvent en entreprise.

CritèreSSH keysHTTPS + token
ConfigurationGénération de clé + ajout sur la plateformeToken + credential helper
SécuritéClé privée chiffrée (passphrase)Token révocable, scoped
Pare-feuPort 22 (parfois bloqué)Port 443 (rarement bloqué)
Multi-comptes1 clé par compte (SSH config)1 token par scope
ExpirationPas d'expiration (sauf rotation manuelle)Configurable (30/90/365 jours)
CI/CDDeploy keysTokens de service
FacilitéSetup initial plus complexePlus simple avec GCM

Ces quatre situations couvrent la quasi-totalité des cas. Retenez surtout la troisième : sur un runner de CI, une clé SSH personnelle n'a rien à faire, parce qu'elle porte tous vos droits et ne s'expire pas. Un token de service ou une deploy key limitée à un dépôt reste la seule option acceptable.

  • Développeur ou équipe : SSH ed25519 (setup unique, très courant en solo comme en équipe, à condition de bien gérer clés et passphrases)
  • Équipe avec SSO : HTTPS + GCM (OAuth intégré)
  • CI/CD : HTTPS + token de service (scoped, révocable)
  • Derrière un pare-feu : HTTPS (port 443), SSH sur port 443 en fallback

Les plateformes Git utilisent des tokens au lieu des mots de passe :

GitHub propose deux familles de tokens. Les fine-grained se limitent à des dépôts choisis et à des permissions par ressource, les classic donnent des scopes larges valables sur tout votre compte. Prenez systématiquement un token fine-grained : c'est le seul qui permette de répondre à la question « ce token peut lire quoi, exactement ? ». Le token n'est affiché qu'une fois, à la création.

  1. Settings → Developer settings → Personal access tokens → Fine-grained
  2. Sélectionnez les permissions (repo, workflow...)
  3. Copiez le token, utilisez-le comme mot de passe

GitLab distingue les tokens de compte (qui portent vos droits partout), de projet et de groupe. Pour un usage automatisé, préférez un token de projet : il meurt avec le projet et n'ouvre rien d'autre. Le scope read_repository suffit pour un clone ou un pull, write_repository n'est nécessaire que pour pousser.

  1. User Settings → Access Tokens
  2. Sélectionnez les scopes (read_repository, write_repository...)
  3. Copiez le token

Ces quatre règles se résument à une idée : un token doit avoir une portée et une durée de vie explicites. Le dernier point est le plus violé et le plus coûteux, parce qu'un token committé reste exploitable même après suppression du commit fautif tant qu'il n'a pas été révoqué côté plateforme. Le nettoyage de l'historique est détaillé dans le guide sur les secrets dans Git.

  • Scoped : donnez le minimum de permissions
  • Expiration : configurez une date d'expiration
  • Rotation : renouvelez régulièrement
  • Jamais dans le code : utilisez des variables d'environnement ou un credential helper

L'astuce tient dans le champ Host : github-perso et github-pro sont des alias inventés, ils n'existent pas dans le DNS. C'est HostName github.com qui indique le vrai serveur à contacter. En clonant avec l'alias, vous choisissez implicitement la clé privée employée, sans jamais avoir à passer d'option à git.

# Compte personnel
Host github-perso
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_perso
# Compte pro
Host github-pro
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_pro
Fenêtre de terminal
git clone git@github-perso:user/repo.git # Compte perso
git clone git@github-pro:org/repo.git # Compte pro

Côté HTTPS, la sélection se fait sur l'emplacement du dépôt sur le disque. La directive includeIf "gitdir:~/work/" charge un fichier de configuration supplémentaire dès que le dépôt courant se trouve sous ~/work/. Vous n'avez donc plus à penser à l'identité utilisée : elle découle du répertoire dans lequel vous avez cloné. La barre oblique finale est obligatoire, elle signifie « ce répertoire et tout ce qu'il contient ».

~/.gitconfig
[includeIf "gitdir:~/perso/"]
path = ~/.gitconfig-perso
[includeIf "gitdir:~/work/"]
path = ~/.gitconfig-work
~/.gitconfig-perso
[user]
email = perso@example.com
[credential "https://github.com"]
username = user-perso

Un seul symptôme domine largement : Git redemande les identifiants. Avant de changer de helper, vérifiez lequel est réellement actif avec git config --show-origin credential.helper, car une valeur posée au niveau du dépôt l'emporte sur la configuration globale. Les lignes suivantes couvrent les cas où le helper est bien en place mais où l'authentification est refusée pour une autre raison.

SymptômeCause probableSolution
Git redemande le mot de passePas de credential helperConfigurez cache, store ou GCM
remote: Support for password authentication was removedGitHub n'accepte plus les mots de passeUtilisez un PAT ou SSH
Token refusé sur un repoPermissions insuffisantesVérifiez les scopes du token
GCM n'ouvre pas le navigateurVariable DISPLAY manquante (Linux)export GIT_TERMINAL_PROMPT=1 ou configurez le secret store
Mauvais compte utiliséMulti-comptes mal configuréVérifiez ~/.ssh/config ou includeIf
  • cache : temporaire (mémoire), pour les sessions courtes
  • store : persistant en clair, à éviter si possible
  • GCM : recommandé, stockage sécurisé dans le trousseau de l'OS
  • SSH keys : setup unique, très courant en solo comme en équipe
  • HTTPS + token : plus simple avec GCM, meilleur pour les équipes SSO
  • Tokens : toujours scoped, avec expiration, jamais dans le code

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn