# 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 de `https://`) ; > - 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 : ```bash git config --global user.name "Votre nom" git config --global user.email "vous@exemple.com" ``` > Il n'existe **pas** de propriété `user.password` dans Git. Une commande comme `git 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 : ```bash git config --global credential.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. ```bash 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 : ```bash git config --global credential.helper 'cache --timeout=3600' ``` ### `store` — fichier en clair sur le disque ```bash 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 : ```bash 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 : ```bash 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) : ```bash 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](https://github.com/git-ecosystem/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](https://github.com/git-ecosystem/git-credential-manager/releases) puis le configurer : ```bash git-credential-manager configure ``` Sur Linux, GCM peut être adossé à `libsecret` pour le stockage : ```bash git config --global credential.credentialStore secretservice ``` ### Alternative : GitHub CLI Si vous utilisez GitHub, l'outil `gh` configure automatiquement Git pour utiliser vos identifiants GitHub : ```bash 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 |