Autentica con GitHub utilizzando un token


118

Sto cercando di autenticarmi con GitHub utilizzando un token di accesso personale. Nei file della guida su github, afferma di utilizzare il metodo cURL per l'autenticazione ( https://help.github.com/articles/creating-an-access-token-for-command-line-use ). Ho provato questo, ma non riesco ancora a eseguire il push su GitHub. Nota che sto cercando di eseguire il push da un server non autenticato (Travis-CI).

cd $HOME
git config --global user.email "emailaddress@yahoo.com"
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

Questo codice causa gli errori:

remote: accesso anonimo a scuzzlebuzzle / ol3-1.git negato.

irreversibile: autenticazione non riuscita per " https://github.com/scuzzlebuzzle/ol3-1.git/ " "

Risposte:


192

Il tuo curlcomando è completamente sbagliato. Dovresti usare quanto segue

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

A parte questo, ciò non autorizza il tuo computer a clonare il repository se in realtà è privato. (Dare un'occhiata, tuttavia, indica che non lo è.) Quello che faresti normalmente è il seguente:

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

Ciò aggiungerà le tue credenziali al telecomando creato durante la clonazione del repository. Sfortunatamente, tuttavia, non hai il controllo su come Travis clona il tuo repository, quindi devi modificare il telecomando in questo modo.

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

Ciò risolverà il tuo progetto per utilizzare un telecomando con credenziali integrate.

Avvertenza: i token hanno accesso in lettura / scrittura e devono essere trattati come password. Se inserisci il tuo token nell'URL di clonazione durante la clonazione o l'aggiunta di un telecomando,Git writes it to your .git/config file in plain text, which is a security risk.


Grazie mille per il vostro aiuto. Ha funzionato benissimo. Ecco una copia del mio file modificato: github.com/scuzzlebuzzle/ol3-1/blob/master/util/s.sh . Ci sono andato abbastanza vicino. Per qualche motivo non è stato eseguito il push nella directory build1 che ho creato, ma è stato comunque inviato alla directory build, quindi ha funzionato! GRAZIE!
waydelfuturo

1
Non so di quale pulsante dell'editor stai parlando, ma è assolutamente necessario rimuovere il telecomando originale.
Ian Stapleton Cordasco

1
Eh. Freddo. Felice di aiutare.
Ian Stapleton Cordasco

4
Non è necessario attivare il telecomando, è possibile utilizzare invece set-url, come ingit remote set-url origin https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git
berkus

1
Approccio insicuro. Chiave facilmente cat'd per registrare in caso di errore. Utilizzare invece una chiave di distribuzione con ambito ristretto.
Joseph Lust

53

Innanzitutto, è necessario creare un token di accesso personale (PAT). Questo è descritto qui: https://help.github.com/articles/creating-an-access-token-for-command-line-use/

In modo ridicolo, l'articolo ti dice come crearlo, ma non dà assolutamente idea di cosa farne. Dopo circa un'ora di documentazione sulla pesca a strascico e Stack Overflow, ho finalmente trovato la risposta:

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

In realtà sono stato costretto ad abilitare l' autenticazione a due fattori dalla politica aziendale mentre lavoravo da remoto e avevo ancora modifiche locali, quindi in realtà non era clonenecessario, ma push. Ho letto in molti punti che dovevo eliminare e ricreare il telecomando, ma in realtà il mio normale pushcomando ha funzionato esattamente come clonesopra e il telecomando non è cambiato:

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

(@YMHuang mi ha messo sulla strada giusta con il link alla documentazione.)


Grazie per questo, anch'io stavo affrontando lo stesso compito
Surya Prakash Patel

perfettamente bene.
Samim Aftab Ahmed

Ho provato più volte questo approccio, ma sto affrontando lo stesso problema. Ho generato il PTA e poi ho provato ad autenticarmi dopo l'esecuzione del comando push, inserendo il mio nome utente e il mio token. Mi dice ancora che le credenziali sono sbagliate. Cosa mi manca in questi passaggi?
johnny_kb

30

Per evitare di consegnare "le chiavi del castello" ...

Nota che la risposta di sigmavirus24 richiede di dare a Travis un token con permessi abbastanza ampi - poiché GitHub offre solo token con ambiti ampi come "scrivi tutti i miei repository pubblici" o "scrivi tutti i miei repository privati".

Se vuoi restringere l'accesso (con un po 'più di lavoro!) Puoi usare le chiavi di distribuzione GitHub combinate con i campi yaml crittografati di Travis.

Ecco uno schizzo di come funziona la tecnica ...

Innanzitutto genera una chiave di distribuzione RSA (tramite ssh-keygen) chiamata my_keye aggiungila come chiave di distribuzione nelle impostazioni del repository GitHub.

Poi...

$ 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

Quindi usa il $passwordfile per decrittografare la tua chiave di distribuzione al momento dell'integrazione, aggiungendo al tuo file 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

Nota: l'ultima riga pre-popola la chiave RSA di github, che evita la necessità di accettare manualmente al momento di una connessione.


30

Automazione / automazione Git con token OAuth

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

Funziona anche nel git pushcomando.

Riferimento: https://help.github.com/articles/git-automation-with-oauth-tokens/


4
La chiave è impostare git in modo che non sia necessario che venga sempre richiesto il token, come descritto qui: help.github.com/articles/caching-your-github-password-in-git Altre risposte a questa domanda finirà per scrivere il tuo token in chiaro su .git / config che potrebbe essere considerato un rischio per la sicurezza.
girolamo

ottimo riferimento - txs!
dalcam

grazie adorabili https: // <mytoken> @mygiturl ha funzionato a meraviglia nel mio .git \ config
Tyeth

22

Questo ha funzionato per me usando ssh :

ImpostazioniImpostazioni sviluppatoreGenera nuovo token .

git remote set-url origin https://[APPLICATION]:[NEW TOKEN]@github.com/[ORGANISATION]/[REPO].git

2
Funziona anche per i token di accesso personali che utilizzano questo formato:git remote add origin https://[USERNAME]:[NEW TOKEN]@github.com/[USERNAME]/[REPO].git
CommandZ

Dovevo faregit remote add origin https://[USERNAME]:[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git
pacoverflow il

Non è una cattiva idea? Il token non verrà memorizzato nella cache nella cronologia della console?
TheRealChx101

Ha funzionato anche per me git remote add origin https: // [TOKEN] @ git.mycompany.com / [ORGANIZATION] / [REPO] .git
Thomas Chafiol

@ TheRealChx101You può usare qualcosa di simile git remote set-url origin https://[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git> /dev/null 2>&1per evitare la registrazione di output git non sicuri. Memorizza il token in una variabile per evitare di averlo nel registro. Ma deve essere conservato da qualche parte. Per proteggerlo ulteriormente puoi archiviarlo crittografato. Questo approccio è ad esempio supportato da Travis CI.
kap

3

Normalmente mi piace questo

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

Git_token sta leggendo dalla variabile config in azure devops.

Puoi leggere il mio blog completo qui


1

Dopo aver lottato con questo problema per quasi un'intera giornata di hard coding nella sezione ORG / REPO del nostro script di build ottenendo il temuto errore "remoto non trovato", alla fine ho trovato una soluzione funzionante da utilizzare TRAVIS_REPO_SLUG. Il passaggio a questo per gli attributi hardcoded ha funzionato immediatamente.

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

0

Dopo aver lottato così tante ore sull'applicazione del token GitHub, finalmente funziona come di seguito:

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

  • il codice segue la guida di Codefresh sulla clonazione di un repo utilizzando il token (freestyle}
  • test effettuato: sed %d%H%M su parola di corrispondenza'-123456-whatever'
  • push back to the repo (which is private repo )
  • attivato dai webhook DockerHub

Di seguito è riportato il codice completo:

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:$GITHUB_TOKEN@github.com/chetabahana/compose.git
      - cd compose && git remote rm origin
      - git config --global user.name "chetabahana"
      - git config --global user.email "chetabahana@gmail.com"
      - git remote add origin https://chetabahana:$GITHUB_TOKEN@github.com/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

Produzione...

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

La password che utilizzi per accedere al portale github.com non funziona in VS Code CLI / Shell. È necessario copiare il token PAT dall'URL https://github.com/settings/tokens generando un nuovo token e incollare quella stringa nella CLI come password.


0

Se stai utilizzando GitHub Enterprise e la clonazione del repository o il push ti dà un errore 403 invece di richiedere un nome utente / token, puoi usare questo:

  1. Elimina il repository
  2. Apri il prompt dei comandi e vai alla cartella in cui desideri il repository
  3. Genere:
git clone https://[USERNAME]:[TOKEN]@[GIT_ENTERPRISE_DOMAIN]/[ORGANIZATION]/[REPO].git
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.