416 votes

Où stocker le jeton d'accès personnel de GitHub ?

Est-il nécessaire de stocker le jeton d'accès personnel quelque part en local sur la machine après l'avoir généré dans GitHub ?

Dans l'affirmative, y a-t-il un moyen privilégié de le stocker ?

6 votes

Traitez vos jetons comme des mots de passe et gardez-les secrets. Lorsque vous travaillez avec l'API, utilisez les jetons comme variables d'environnement au lieu de les coder en dur dans vos programmes. Voir le numéro 8 de la documentation officielle : aide.github.com/articles/

5 votes

Exactement, j'ai vu ce commentaire lors de la génération du jeton d'accès, mais je n'étais pas sûr de la manière dont les gens assurent leur sécurité dans la pratique.

80 votes

Cela me semble si étrange. La moitié du but des mots de passe est que (idéalement) vous les mémorisiez et que le système les hachât, de sorte qu'ils ne soient jamais stockés nulle part en texte clair. Pourtant, le système de jeton d'accès personnel de GitHub semble vous obliger à stocker le jeton en texte clair ?

294voto

Javier Montón Points 451

Dans mon cas, sous Ubuntu, la solution acceptée n'a pas fonctionné avec un message du genre

git : 'credential-manager' n'est pas une commande git

mais store au lieu de manager a bien fonctionné :

git config --global credential.helper store

42 votes

Juste pour ajouter une note à cela - après avoir activé cette fonction, vous serez invité à fournir vos références lors de votre prochain commit. Après cela, elles sont stockées.

90 votes

Cela semble stocker votre jeton en texte brut dans ~/.git-credentials

11 votes

Je trouve très utile que les gens fournissent au moins un lien après avoir émis un avertissement sur quelque chose. S'il vous plaît, regardez aquí pour des instructions stellaires sur la façon de "stocker" le PAT en toute sécurité et de travailler avec le flux de travail git. Seulement 3 lignes de code.

254voto

VonC Points 414372

La moitié du but des mots de passe est que (idéalement) vous les mémorisiez et que le système les hachât, de sorte qu'ils ne soient jamais stockés nulle part en texte clair.
Pourtant, le système de jeton d'accès personnel de GitHub semble essentiellement vous obliger à stocker le jeton en texte clair ?

Tout d'abord, un PAT (Personal Access Token) n'est pas un simple mot de passe, mais un équivalent de celui :

  • vous pouvez générer plusieurs temps (par exemple, un par machine à partir de laquelle vous devez accéder au dépôt GitHub)
  • vous pouvez révoquer à tout moment (depuis l'interface web de GitHub), ce qui rend ce PAT obsolète, même s'il subsiste sur l'une de ces machines.

À la différence de votre mot de passe, qui est unique à votre compte et ne peut pas être changé facilement sans avoir à également modifiez-le partout où vous l'utilisez.


Étant donné qu'un PAT peut être utilisé à la place d'un mot de passe lors de l'exécution d'opérations Git sur HTTPS avec Git en ligne de commande ou l'API, vous pouvez utiliser un aide à l'accréditation git pour le mettre en cache de manière sécurisée.
Sous Windows, par exemple, il faudrait utiliser le gestionnaire de justificatifs Windows par le biais de la GCM -- Git Credential Manager -- pour Windows :

git config --global credential.helper manager

La première fois que vous poussez vers un dépôt, une fenêtre popup vous demandera vos informations d'identification : nom d'utilisateur et votre PAT.
La fois suivante, il ne le demandera pas et réutilisera directement ce PAT, qui reste stocké en toute sécurité dans votre gestionnaire de justificatifs.

Une idée similaire s'applique pour Mac avec le porte-clés OSX et Linux avec le Porte-clés GNOME (en 2021, il s'agirait a besoin d'une session DBus et libsecret , ).
L'idée demeure : stocker la PAT dans un crypté magasin de références.


La solution la plus moderne (T4 2020) est la suivante Microsoft Git-Credential-Manager-Core

git config --global credential.helper manager-core

Vous avez besoin de cela pour installer git-credential-manager-core en téléchargeant son dernière version comme gcmcore-linux_amd64.2.0.474.41365.deb

sudo dpkg -i <path-to-package>
git-credential-manager-core configure

Le support Linux n'est pas encore totalement implémenté, mais il le sera bientôt.

Bien que, avec GCM (Git-Credential-Manager-Core) sur Linux, comme indiqué par Mekky Mayata sur les commentaires vous devez définir un git config --global credential.credentialStore d'abord.

Voir " Magasins d'identifiants sous Linux " :

Il existe quatre options de stockage des informations d'identification que le Git Credential Manager Core (GCM Core) gère sur les plateformes Linux :

Par défaut, GCM Core est livré pas configuré.
Vous pouvez sélectionner le magasin d'informations d'identification à utiliser en définissant l'onglet GCM_CREDENTIAL_STORE ou la variable d'environnement credential.credentialStore Paramètre de configuration de Git.

Comme l'a noté agent18 sur les commentaires en utilisant git-credential-libsecret après avoir installé libsecret-1-0 et libsecret-1-dev est une bonne première étape.
Mais cela devrait être finalement enveloppé par credential-manager-core .

3 votes

La solution Keyring de GNOME que vous avez mentionnée ne fonctionne pas pour Ubuntu 20.04, étant donné que le paquet libgnome-keyring-dev n'est pas disponible dans cette suite . Est-ce ce que vous vouliez dire par le fait que le support Linux n'est pas encore complètement implémenté ? Quelles sont les solutions de contournement recommandées, et où puis-je vérifier les progrès réalisés ?

2 votes

@Mxt Le GCM-Core supporte maintenant Linux ( github.com/microsoft/Git-Credential-Manager-Core/blob/master/ ), mais c'est désormais la solution de rechange officielle.

3 votes

Les deux dernières lignes me donnent l'erreur suivante après git push : /var/tmp/.net/user/git-credential-manager-core/unqypyc0.awl/‌​git-credential-manag‌​er-core get: 1: /var/tmp/.net/user/git-credential-manager-core/unqypyc0.awl/‌​git-credential-manag‌​er-core: not found

29voto

Thej Kiran Points 148

Testé sur Ubuntu 20.04, installation presque récente, avec Git 2.25.1 et unity 7.5.

Les bases de l'authentification

Github a besoin d'une clé d'authentification (avec certains droits liés à ladite clé d'authentification). Une clé d'authentification particulière a certains droits, (lire les repos privés, lire les repos publics en écriture etc...) et "agit comme un mot de passe" associé à des droits qui peuvent être révoqués quand l'utilisateur le souhaite.

Jeton d'accès personnel

  1. Nous commençons par faire un PAT . I.E., Settings --> Developer Settings--> Persaonl access tokens --> Generate new token --> Note --> set permissions (repo,repo_hook maybe) --> generate token
  2. git push le repo et tapez le token généré (mot de passe très long) comme mot de passe lorsque cela vous est demandé.

Stocker le mot de passe de différentes manières

    • On peut le faire dans un fichier et ensuite utiliser xclip pour le ramener dans le presse-papiers et le coller à chaque fois (Screw this)
    • Cache avec le aide des commandes git git config credential.helper cache <time-limit-of-cache> . Mais vous devez toujours, d'une manière ou d'une autre, clipper le mot de passe après la limite de temps.
    • Le stocker de façon permanente dans un fichier avec des commandes git git config credential.helper store (n'utilisez pas --global). Ceci n'est PAS ENCRYPTÉ. Vous pouvez ouvrir le fichier et le lire. (Par exemple, si quelqu'un a accès à votre ordinateur portable, il peut pratiquement lire le mot de passe en utilisant une clé USB de démarrage (en supposant que tout votre système n'est pas crypté)).
    • Ou suivre la voie du cryptage comme indiqué dans ici . Ce n'est pas du tout compliqué. 3 étapes simples.

    sudo apt-get install libsecret-1-0 libsecret-1-dev sudo make --directory=/usr/share/doc/git/contrib/credential/libsecret

    git config credential.helper \ /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret

Cela permet de stocker le pw dans un format crypté. Le site git config se trouve dans le fichier .git/config dans votre repo loca comme indiqué ici si jamais vous en avez besoin.

P.S. Il y a de nombreux endroits qui suggèrent l'utilisation de Gnome-keyring mais c'est apparemment déprécié .

Stocker des mots de passe/ATP pour plus d'un compte

Cela devient délicat et il semble, comme le suggère @VonC, que nous ayons besoin d'un Git-Credential-Manager core (noyau GCM). Cette réponse est améliorée sur la base de mes conclusions dans cette réponse .

  1. Premier installer le noyau GCM

    1. Télécharger le dernier paquet .deb
    2. sudo dpkg -i <path-to-package>
    3. git-credential-manager-core configure
    4. git config --global credential.credentialStore secretservice comme nous utilisons libsecret
  2. Obtenir la dernière version de git

    Dans mon cas, j'avais git 2.25 et j'ai eu une erreur error: unknown option 'show-scope' . Il semble que le noyau GCM utilise une version plus élevée de git (au moins 2.26).

    Alors installez la dernière et la meilleure git selon ici :

     sudo add-apt-repository ppa:git-core/ppa
     sudo apt-get update
     apt list git # shows the latest git currently 2.31
     sudo apt-get install git #or sudo apt-get upgrade
  3. Mise à jour du chemin distant de git avec le nom d'utilisateur intégré

    Le noyau GCM en a besoin pour identifier les différents comptes :(

     git remote set-url origin https://user1@github.com/user1/myRepo1.git
     git remote set-url origin https://user2@github.com/user1/myRepo1.git
                                   ^^^^^

Votre ~/.gitconfig Le dossier sera donc le suivant :

[credential]
   helper = /usr/bin/git-credential-manager-core
   credentialStore = secretservice
[credential "https://dev.azure.com"]
   useHttpPath = true

2 votes

J'ai déjà upvoted votre réponse, mais grand feedback.

1 votes

J'ai dû utiliser git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credenti‌​al-libsecret erase avant, puis enregistrez le nouveau jeton. J'utilisais déjà libsecret

3 votes

Votre réponse était utile, mais tellement dramatique. C'est tout ce que j'ai fait git remote set-url origin https://username:your-personal-access-token@github.com/usern‌​ame/repo.git

6voto

nbari Points 847

J'aime les garder cryptées dans le référentiel et les charger à l'aide de .envrc ( https://direnv.net/ )

Pour ce faire, j'utilise ssh-vault pour crypter les données en utilisant mon les clés ssh que GitHub expose déjà par exemple :

echo MY_TOKEN="secret" | ssh-vault -u <github-user> create > my-encypted-vars.ssh

Alors le contenu de .envrc ressemble à quelque chose comme ça :

echo "Enter ssh key password"
context=$(ssh-vault view $HOME/projects/my-encrypted.ssh | tail -n +2)
export ${context}

Cela va décrypter les données dans my-encrypted-vars.ssh et définir MY_TOKEN dans mes variables d'environnement à chaque fois que je cd dans le répertoire du projet.

En faisant cela, les jetons/variables sont stockés "en sécurité" et toujours prêts à être utilisés comme variables d'environnement.

2 votes

Je préfère utiliser les magasins de justificatifs officiels, comme je l'explique dans ma réponse mais votre proposition d'un coffre-fort dédié est intéressante. +1

0 votes

Je recommanderais de mettre my-encrypted-vars.ssh sur .git pour éviter de le vérifier dans la source

5voto

Ed_N Points 21

Vous pouvez mettre en cache vos informations d'identification pour une durée définie en utilisant :

git config --global credential.helper cache

La période de cache par défaut est de 900 sec (15 min) mais peut être modifiée avec :

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

Voir la page Github suivante :

https://docs.github.com/en/github/using-git/caching-your-github-credentials-in-git

Il ne s'agit pas d'un stockage permanent et, comme d'autres commentaires, les informations d'identification ne devraient pas être stockées en texte clair, ce qui constitue un risque pour la sécurité. J'utilise un gestionnaire de mots de passe ( https://bitwarden.com/ ) pour enregistrer le PAT (Personal Access Token) puis le copier lors de la première utilisation, où il est ensuite mis en cache. Un PAT est nécessaire si vous activez le système 2FA sur votre compte Github.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X