web-dev-qa-db-fra.com

Authentifier avec GitHub en utilisant un jeton

J'essaie de m'authentifier auprès de GitHub à l'aide d'un jeton d'accès personnel. Dans les fichiers d’aide de github, il est indiqué 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'essaie d'envoyer depuis 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/ ' "

86
wayofthefuture

Votre commande curl est totalement fausse. 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é. (Prendre un coup d'oeil, cependant, indique que ce n'est pas.) Ce que vous feriez normalement est la suivante:

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, vous n'avez aucun contrôle sur la manière dont Travis clone votre référentiel. Vous devez donc modifier la télécommande de cette manière.

# After cloning
cd gh-pages
git remote rm Origin
git remote add Origin https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git

Cela permettra à votre projet d’utiliser une télécommande avec des informations d’identification intégrées.

134

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

Notez que la réponse de sigmavirus24 nécessite que vous donniez à Travis un jeton avec des autorisations relativement étendues, car GitHub n'offre que des jetons avec des étendues étendues telles que "é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 n croquis de la façon dont la technique fonctionne ...

Commencez par générer une clé de déploiement RSA (via ssh-keygen) appelée my_key et ajoutez-la en tant que clé de déploiement dans les paramètres de votre référentiel 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

Utilisez ensuite le fichier $password pour déchiffrer 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.

26
Bosh

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 de débordement de pile, 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é forcé d'activer authentification à deux facteurs par la politique de l'entreprise alors que je travaillais à distance et que des modifications locales étaient encore en place. En fait, ce n'était donc pas clone dont j'avais besoin, mais Push. J'ai lu dans beaucoup d'endroits où je devais supprimer et recréer la télécommande, mais ma commande normale Push fonctionnait exactement de la même manière que la clone ci-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 vers la documentation.)

26
Echelon

Automation/automatisation Git avec OAuth jetons

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

Cela fonctionne également dans la commande git Push.

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

25
John Huang

Cela a fonctionné pour moi avec ssh:

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

git remote rm Origin
git remote add Origin https://[APPLICATION]:[NEW TOKEN]@github.com/[ORGANISATION]/[REPO].git
9
ccreedon1

Après avoir passé tant d'heures à appliquer le jeton GitHub , il fonctionne comme suit:

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

  • le code suit Codefresh conseils sur le clonage d'un référentiel à l'aide d'un jeton (style libre}
  • test effectué: sed %d%H%M sur la correspondance Word '-123456-whatever'
  • Repousser vers le dépôt (qui est un dépôt privé )
  • déclenché par DockerHub webhooks

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

Sortie...

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 
0
Chetabahana