S'authentifier avec GitHub à l'aide d'un jeton

118

J'essaie de m'authentifier avec GitHub en utilisant un jeton d'accès personnel. Dans les fichiers d'aide de github, il indique d'utiliser la méthode cURL pour s'authentifier ( https://help.github.com/articles/creating-an-access-token-for-command-line-use ). J'ai essayé cela, mais je ne peux toujours pas pousser vers GitHub. Veuillez noter que j'essaye de pousser à partir d'un serveur non authentifié (Travis-CI).

cd $HOME
git config --global user.email "[email protected]"
git config --global user.name "username"

curl -u "username:<MYTOKEN>" https://github.com/username/ol3-1.git
git clone --branch=gh-pages https://github.com/username/ol3-1.git gh-pages

cd gh-pages
mkdir buildtest
cd buildtest
touch asdf.asdf

git add -f .
git commit -m "Travis build $TRAVIS_BUILD_NUMBER pushed to gh-pages"
git push -fq origin gh-pages

Ce code provoque les erreurs:

remote: accès anonyme à scuzzlebuzzle / ol3-1.git refusé.

fatal: échec de l'authentification pour ' https://github.com/scuzzlebuzzle/ol3-1.git/ ' "

chemin du futur
la source

Réponses:

192

Votre curlcommande est entièrement erronée. Vous devriez utiliser ce qui suit

curl -H 'Authorization: token <MYTOKEN>' ...

Cela mis à part, cela n'autorise pas votre ordinateur à cloner le référentiel s'il est en fait privé. (Cependant, jeter un coup d'œil indique que ce n'est pas le cas.) Ce que vous feriez normalement est ce qui suit:

git clone https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git --branch=gh-pages gh-pages

Cela ajoutera vos informations d'identification à la télécommande créée lors du clonage du référentiel. Malheureusement, cependant, vous n'avez aucun contrôle sur la façon dont Travis clone votre référentiel, vous devez donc éditer la télécommande comme ça.

# After cloning
cd gh-pages
git remote set-url origin https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git

Cela corrigera votre projet pour utiliser une télécommande avec des informations d'identification intégrées.

Attention: les jetons ont un accès en lecture / écriture et doivent être traités comme des mots de passe. Si vous entrez votre jeton dans l'URL de clonage lors du clonage ou de l'ajout d'une télécommande,Git writes it to your .git/config file in plain text, which is a security risk.

Ian Stapleton Cordasco
la source
Je vous remercie beaucoup pour votre aide. Cela a très bien fonctionné. Voici une copie de mon fichier modifié: github.com/scuzzlebuzzle/ol3-1/blob/master/util/s.sh . Je l'ai assez proche. Pour une raison quelconque, il n'a pas poussé vers le répertoire build1 que j'ai créé, mais il a quand même poussé vers le répertoire build, donc cela a fonctionné! MERCI!
wayofthefuture
1
Je ne sais pas de quel bouton d'édition vous parlez, mais la suppression de la télécommande d'origine est absolument nécessaire.
Ian Stapleton Cordasco
1
Il h. Cool. Heureux de vous aider.
Ian Stapleton Cordasco
4
Vous n'avez pas besoin de rm la télécommande, vous pouvez utiliser set-url à la place, comme dansgit remote set-url origin https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git
berkus
1
Approche peu sûre. Clé facilement cat'd pour se connecter en cas d'erreur. Utilisez plutôt une clé de déploiement à portée étroite.
Joseph Lust
53

Tout d'abord, vous devez créer un jeton d'accès personnel (PAT). Ceci est décrit ici: https://help.github.com/articles/creating-an-access-token-for-command-line-use/

De manière risible, l'article vous explique comment le créer, mais ne donne absolument aucune idée de ce qu'il faut en faire. Après environ une heure de documentation sur le chalutage et Stack Overflow, j'ai finalement trouvé la réponse:

$ git clone https://github.com/user-or-organisation/myrepo.git
Username: <my-username>
Password: <my-personal-access-token>

J'ai été en fait obligé d'activer l' authentification à deux facteurs par la politique de l'entreprise alors que je travaillais à distance et que j'avais encore des changements locaux, donc en fait ce n'était pas clonenécessaire, mais push. J'ai lu dans de nombreux endroits dont j'avais besoin pour supprimer et recréer la télécommande, mais en fait, ma pushcommande normale fonctionnait exactement de la même manière que cloneci - dessus, et la télécommande n'a pas changé:

$ git push https://github.com/user-or-organisation/myrepo.git
Username: <my-username>
Password: <my-personal-access-token>

(@YMHuang m'a mis sur la bonne voie avec le lien de documentation.)

Échelon
la source
Merci pour cela, j'étais également confronté à la même tâche
Surya Prakash Patel
parfaitement bien.
Samim Aftab Ahmed
J'ai essayé plusieurs fois cette approche, mais je suis confronté au même problème. J'ai généré le PTA, puis j'ai essayé de m'authentifier après l'exécution de la commande push, en mettant mon nom d'utilisateur et mon jeton. Cela me dit toujours que les informations d'identification sont fausses. Que me manque-t-il dans ces étapes?
johnny_kb le
30

Pour éviter de remettre "les clés du château" ...

Notez que la réponse de sigmavirus24 vous oblige à donner à Travis un jeton avec des autorisations assez larges - puisque GitHub ne propose que des jetons avec de larges portées comme «écrire tous mes dépôts publics» ou «écrire tous mes dépôts privés».

Si vous souhaitez restreindre l'accès (avec un peu plus de travail!), Vous pouvez utiliser des clés de déploiement GitHub combinées avec des champs yaml chiffrés par Travis.

Voici un aperçu du fonctionnement de la technique ...

Commencez par générer une clé de déploiement RSA (via ssh-keygen) appelée my_keyet ajoutez-la en tant que clé de déploiement dans vos paramètres de dépôt github.

Ensuite...

$ password=`openssl rand -hex 32`
$ cat my_key | openssl aes-256-cbc -k "$password" -a  > my_key.enc
$ travis encrypt --add password=$password -r my-github-user/my-repo

Ensuite, utilisez le $passwordfichier pour décrypter votre clé de déploiement au moment de l'intégration, en ajoutant à votre fichier yaml:

before_script: 
  - openssl aes-256-cbc -k "$password" -d -a -in my_key.enc -out my_deploy_key
  - echo -e "Host github.com\n  IdentityFile /path/to/my_deploy_key" > ~/.ssh/config
  - echo "github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==" > ~/.ssh/known_hosts

Remarque: la dernière ligne pré-remplit la clé RSA de github, ce qui évite d'avoir à accepter manuellement au moment d'une connexion.

Étalages
la source
30

Automatisation / Automatisation Git avec des jetons OAuth

$ git clone https://github.com/username/repo.git
  Username: your_token
  Password:

Cela fonctionne également dans la git pushcommande.

Référence: https://help.github.com/articles/git-automation-with-oauth-tokens/

John Huang
la source
4
La clé est de définir git de sorte que vous n'ayez pas besoin d'être invité à tout moment pour votre jeton, comme décrit ici - help.github.com/articles/caching-your-github-password-in-git Autres réponses à cette question finira par écrire votre jeton en texte brut dans .git / config, ce qui pourrait être considéré comme un risque de sécurité.
jerome
grande référence - txs!
dalcam
charmant merci https: // <mytoken> @mygiturl a travaillé un régal dans mon .git \ config
Tyeth
22

Cela a fonctionné pour moi en utilisant ssh :

ParamètresParamètres du développeurGénérer un nouveau jeton .

git remote set-url origin https://[APPLICATION]:[NEW TOKEN]@github.com/[ORGANISATION]/[REPO].git
ccreedon1
la source
2
Cela fonctionne également pour les jetons d'accès personnels utilisant ce format:git remote add origin https://[USERNAME]:[NEW TOKEN]@github.com/[USERNAME]/[REPO].git
CommandZ
Je devais fairegit remote add origin https://[USERNAME]:[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git
pacoverflow
N'est-ce pas une mauvaise idée? Le jeton ne sera-t-il pas mis en cache dans l'historique de la console?
TheRealChx101
A également travaillé pour moi git remote add origin https: // [TOKEN] @ git.mycompany.com / [ORGANISATION] / [REPO] .git
Thomas Chafiol
@ TheRealChx101 Vous pouvez utiliser quelque chose comme git remote set-url origin https://[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git> /dev/null 2>&1pour éviter la journalisation de la sortie git non sécurisée. Stockez le jeton dans une variable pour éviter de l'avoir dans le journal. Mais il doit être stocké quelque part. Pour sécuriser davantage, vous pouvez le stocker crypté. Cette approche est par exemple soutenue par Travis CI.
kap le
3

Normalement j'aime ça

 git push https://$(git_token)@github.com/user_name/repo_name.git

Le git_token lit à partir de la configuration de la variable dans azure devops.

Vous pouvez lire mon blog complet ici

Tony Ngo
la source
1

Après avoir lutté avec ce problème pendant à peu près une journée complète de codage en dur dans la section ORG / REPO de notre script de construction en obtenant l'erreur redoutée `` remote not found '', a finalement trouvé une solution de travail pour utiliser le TRAVIS_REPO_SLUG. Changer cela pour les attributs codés en dur a fonctionné immédiatement.

git remote set-url origin https://[ORG]:${TOKEN}@github.com/${TRAVIS_REPO_SLUG}
mdmjsh
la source
0

En ayant lutté pendant tant d'heures pour appliquer le jeton GitHub, cela fonctionne comme ci-dessous:

$ cf_export GITHUB_TOKEN=$(codefresh get context github --decrypt -o yaml | yq -y .spec.data.auth.password)

  • code suit les conseils de Codefresh sur le clonage d'un dépôt à l'aide de token (freestyle}
  • test effectué: sed %d%H%M sur le mot de correspondance'-123456-whatever'
  • repousser au repo (qui est un repo privé )
  • déclenché par les webhooks DockerHub

Voici le code complet:

version: '1.0'
steps:
  get_git_token:
    title: Reading Github token
    image: codefresh/cli
    commands:
      - cf_export GITHUB_TOKEN=$(codefresh get context github --decrypt -o yaml | yq -y .spec.data.auth.password)
  main_clone:
    title: Updating the repo
    image: alpine/git:latest
    commands:
      - git clone https://chetabahana:[email protected]/chetabahana/compose.git
      - cd compose && git remote rm origin
      - git config --global user.name "chetabahana"
      - git config --global user.email "[email protected]"
      - git remote add origin https://chetabahana:[email protected]/chetabahana/compose.git
      - sed -i "s/-[0-9]\{1,\}-\([a-zA-Z0-9_]*\)'/-`date +%d%H%M`-whatever'/g" cloudbuild.yaml
      - git status && git add . && git commit -m "fresh commit" && git push -u origin master

Production...

On branch master 
Changes not staged for commit: 
  (use "git add ..." to update what will be committed) 
  (use "git checkout -- ..." to discard changes in working directory) 

modified:   cloudbuild.yaml 

no changes added to commit (use "git add" and/or "git commit -a") 
[master dbab20f] fresh commit 
 1 file changed, 1 insertion(+), 1 deletion(-) 
Enumerating objects: 5, done. 
Counting objects:  20% (1/5) ...  Counting objects: 100% (5/5), done. 
Delta compression using up to 4 threads 
Compressing objects:  33% (1/3) ... Writing objects: 100% (3/3), 283 bytes | 283.00 KiB/s, done. 
Total 3 (delta 2), reused 0 (delta 0) 
remote: Resolving deltas:   0% (0/2)  ...   (2/2), completed with 2 local objects. 
To https://github.com/chetabahana/compose.git 
   bbb6d2f..dbab20f  master -> master 
Branch 'master' set up to track remote branch 'master' from 'origin'. 
Reading environment variable exporting file contents. 
Successfully ran freestyle step: Cloning the repo 
Chetabahana
la source
0

Le mot de passe que vous utilisez pour vous connecter au portail github.com ne fonctionne pas dans VS Code CLI / Shell. Vous devez copier le jeton PAT à partir de l'URL https://github.com/settings/tokens en générant un nouveau jeton et collez cette chaîne dans la CLI comme mot de passe.

Kanna Reddy
la source
0

Si vous utilisez GitHub Enterprise et que le clonage du dépôt ou le pushing vous donne une erreur 403 au lieu de demander un nom d'utilisateur / jeton, vous pouvez utiliser ceci:

  1. Supprimer le dépôt
  2. Ouvrez l'invite de commande et accédez au dossier dans lequel vous souhaitez placer le dépôt
  3. Type:
git clone https://[USERNAME]:[TOKEN]@[GIT_ENTERPRISE_DOMAIN]/[ORGANIZATION]/[REPO].git
Gigazelle
la source