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 ?
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 ?
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.
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.
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 :
À 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 :
- freedesktop.org API des services secrets
- GPG/
pass
fichiers compatibles- La fonction intégrée de Git cache d'informations d'identification
- Fichiers en clair
Par défaut, GCM Core est livré pas configuré.
Vous pouvez sélectionner le magasin d'informations d'identification à utiliser en définissant l'ongletGCM_CREDENTIAL_STORE
ou la variable d'environnementcredential.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
.
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 ?
@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.
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-manager-core get: 1: /var/tmp/.net/user/git-credential-manager-core/unqypyc0.awl/git-credential-manager-core: not found
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
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
xclip
pour le ramener dans le presse-papiers et le coller à chaque fois (Screw this)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.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é)).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 .
Premier installer le noyau GCM
sudo dpkg -i <path-to-package>
git-credential-manager-core configure
git config --global credential.credentialStore secretservice
comme nous utilisons libsecret
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
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
J'ai dû utiliser git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret erase
avant, puis enregistrez le nouveau jeton. J'utilisais déjà libsecret
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.
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
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 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.
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 ?
0 votes
Puis-je vous demander pourquoi vous avez besoin de les stocker ? Peut-être existe-t-il des alternatives qui ne vous obligent pas à les stocker localement...
16 votes
Ils sont générés automatiquement et sont longs, il n'est donc pas possible de les mémoriser.
1 votes
Il semble y avoir une variante plus récente de celle référencée par @bytestorm :
sudo apt-get install libsecret-1-0 libsecret-1-dev
;cd /usr/share/doc/git/contrib/credential/libsecret
;sudo make
;git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
Jetez un coup d'œil ici : stackoverflow.com/a/14528360/702037817 votes
Il semble que GitHub vienne de désactiver l'authentification du mot de passe pour
git push
et impose désormais l'utilisation d'un jeton à la place. Nous devons donc maintenant stocker le jeton en texte clair ou utiliser un assistant d'authentification pour le stocker à votre place. Dans tous les cas, une personne accédant à votre ordinateur a maintenant un accès en écriture à votre dépôt. - À l'époque où je pouvais me contenter d'utiliser un mot de passe à saisir à chaque fois, ce risque de sécurité particulier n'existait pas. Et n'oublions pas que quelqu'un qui connaît mon mot de passe pourrait facilement l'utiliser pour créer ses propres jetons. En termes de sécurité, nous ne gagnons donc rien, à moins que GitHub ne décide également d'appliquer le système 2FA.