Authentifizieren Sie sich mit GitHub mithilfe eines Tokens

118

Ich versuche, mich mit einem persönlichen Zugriffstoken bei GitHub zu authentifizieren. In den Hilfedateien bei github wird angegeben, dass zur Authentifizierung die cURL-Methode verwendet werden soll ( https://help.github.com/articles/creating-an-access-token-for-command-line-use ). Ich habe es versucht, kann aber immer noch nicht auf GitHub pushen. Bitte beachten Sie, dass ich versuche, von einem nicht authentifizierten Server (Travis-CI) zu pushen.

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

Dieser Code verursacht die Fehler:

remote: Anonymer Zugriff auf scuzzlebuzzle / ol3-1.git verweigert.

Schwerwiegend: Authentifizierung für ' https://github.com/scuzzlebuzzle/ol3-1.git/ ' fehlgeschlagen. "

Weg der Zukunft
quelle

Antworten:

191

Ihr curlBefehl ist völlig falsch. Sie sollten Folgendes verwenden

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

Abgesehen davon autorisiert dies Ihren Computer nicht, das Repository zu klonen, wenn es tatsächlich privat ist. (Ein Blick zeigt jedoch an, dass dies nicht der Fall ist.) Normalerweise würden Sie Folgendes tun:

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

Dadurch werden Ihre Anmeldeinformationen zu der beim Klonen des Repositorys erstellten Fernbedienung hinzugefügt. Leider haben Sie jedoch keine Kontrolle darüber, wie Travis Ihr Repository klont, sodass Sie die Fernbedienung wie folgt bearbeiten müssen.

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

Dadurch wird Ihr Projekt so repariert, dass eine Fernbedienung mit integrierten Anmeldeinformationen verwendet wird.

Warnung: Token haben Lese- / Schreibzugriff und sollten wie Passwörter behandelt werden. Wenn Sie Ihr Token beim Klonen oder Hinzufügen einer Fernbedienung in die Klon-URL eingeben,Git writes it to your .git/config file in plain text, which is a security risk.

Ian Stapleton Cordasco
quelle
Vielen Dank für deine Hilfe. Es hat super funktioniert. Hier ist eine Kopie meiner geänderten Datei: github.com/scuzzlebuzzle/ol3-1/blob/master/util/s.sh . Ich habe es ziemlich nah. Aus irgendeinem Grund wurde es nicht in das von mir erstellte Verzeichnis build1 verschoben, aber es wurde trotzdem in das Verzeichnis build1 verschoben, sodass es funktionierte! VIELEN DANK!
Wayofthefuture
1
Ich weiß nicht, von welcher Editor-Schaltfläche Sie sprechen, aber das Entfernen der Originalfernbedienung ist unbedingt erforderlich.
Ian Stapleton Cordasco
1
Heh. Cool. Froh, dass ich Helfen kann.
Ian Stapleton Cordasco
4
Sie müssen die Fernbedienung nicht rm, Sie können stattdessen set-url verwenden, wie ingit remote set-url origin https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git
berkus
1
Unsicherer Ansatz. Schlüssel leicht zu loggen, um Fehler anzumelden. Verwenden Sie stattdessen einen engmaschigen Bereitstellungsschlüssel.
Joseph Lust
53

Zunächst müssen Sie ein persönliches Zugriffstoken (PAT) erstellen. Dies wird hier beschrieben: https://help.github.com/articles/creating-an-access-token-for-command-line-use/

Lachenderweise sagt Ihnen der Artikel, wie man es erstellt, gibt aber absolut keine Ahnung, was man damit machen soll. Nach ungefähr einer Stunde Schleppnetzdokumentation und Stapelüberlauf fand ich endlich die Antwort:

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

Ich war tatsächlich gezwungen, die Zwei-Faktor-Authentifizierung gemäß den Unternehmensrichtlinien zu aktivieren , während ich remote arbeitete und noch lokale Änderungen hatte. Tatsächlich war dies nicht cloneerforderlich, aber push. Ich habe an vielen Stellen gelesen, dass ich die Fernbedienung löschen und neu erstellen musste, aber tatsächlich pushfunktionierte mein normaler Befehl genauso wie derclone oben, und die Fernbedienung änderte sich nicht:

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

(@YMHuang hat mich mit dem Dokumentationslink auf den richtigen Weg gebracht.)

Echelon
quelle
Vielen Dank dafür, ich stand auch vor der gleichen Aufgabe
Surya Prakash Patel
vollkommen in Ordnung.
Samim Aftab Ahmed
Ich habe diesen Ansatz mehrmals versucht, aber ich stehe vor dem gleichen Problem. Ich habe die PTA generiert und dann versucht, mich nach der Ausführung des Push-Befehls zu authentifizieren, wobei ich meinen Benutzernamen und mein Token eingegeben habe. Es sagt mir immer noch, dass die Anmeldeinformationen falsch sind. Was fehlt mir in diesen Schritten?
johnny_kb
30

Um zu vermeiden, "die Schlüssel zum Schloss" zu übergeben ...

Beachten Sie, dass Sie für die Antwort von sigmavirus24 Travis ein Token mit ziemlich weitreichenden Berechtigungen geben müssen, da GitHub nur Token mit weiten Bereichen wie "Alle meine öffentlichen Repos schreiben" oder "Alle meine privaten Repos schreiben" anbietet.

Wenn Sie den Zugriff einschränken möchten (mit etwas mehr Arbeit!), Können Sie GitHub-Bereitstellungsschlüssel in Kombination mit Travis-verschlüsselten Yaml-Feldern verwenden.

Hier ist eine Skizze wie die Technik funktioniert ...

Generieren Sie zunächst einen ssh-keygenaufgerufenen RSA-Bereitstellungsschlüssel (via )my_key und fügen Sie ihn als Bereitstellungsschlüssel in Ihren Github-Repo-Einstellungen hinzu.

Dann...

$ 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

Verwenden Sie dann die $passwordDatei, um Ihren Bereitstellungsschlüssel zur Integrationszeit zu entschlüsseln, indem Sie Ihrer yaml-Datei Folgendes hinzufügen:

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

Hinweis: In der letzten Zeile wird der RSA-Schlüssel von github vorab ausgefüllt, sodass zum Zeitpunkt einer Verbindung keine manuelle Annahme erforderlich ist.

Bosh
quelle
30

Automatisierung / Git-Automatisierung mit OAuth-Token

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

Es funktioniert auch im git pushBefehl.

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

John Huang
quelle
4
Der Schlüssel ist, git so einzustellen, dass Sie nicht jederzeit zur Eingabe Ihres Tokens aufgefordert werden müssen, wie hier beschrieben - help.github.com/articles/caching-your-github-password-in-git Andere Antworten auf diese Frage Am Ende wird Ihr Token im Klartext in .git / config geschrieben, was als Sicherheitsrisiko angesehen werden kann.
Jerome
tolle Referenz - txs!
Dalcam
Herzlichen Dank https: // <mytoken> @mygiturl arbeitete eine Belohnung in meiner .git \ config
Tyeth
22

Dies funktionierte bei mir mit ssh :

EinstellungenEntwicklereinstellungenNeues Token generieren .

git remote set-url origin https://[APPLICATION]:[NEW TOKEN]@github.com/[ORGANISATION]/[REPO].git
ccreedon1
quelle
2
Dies funktioniert auch für persönliche Zugriffstoken in diesem Format:git remote add origin https://[USERNAME]:[NEW TOKEN]@github.com/[USERNAME]/[REPO].git
CommandZ
Ich musste tungit remote add origin https://[USERNAME]:[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git
Pacoverflow
Ist das nicht eine schlechte Idee? Wird das Token nicht im Konsolenverlauf zwischengespeichert?
TheRealChx101
Funktionierte auch für mich git remote add origin https: // [TOKEN] @ git.mycompany.com / [ORGANISATION] / [REPO] .git
Thomas Chafiol
@ TheRealChx101Sie können so etwas wie git remote set-url origin https://[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git> /dev/null 2>&1das Protokollieren unsicherer Git-Ausgaben vermeiden. Speichern Sie das Token in einer Variablen, um zu vermeiden, dass es im Protokoll enthalten ist. Aber es muss irgendwo aufbewahrt werden. Zur weiteren Sicherung können Sie es verschlüsselt speichern. Dieser Ansatz wird beispielsweise von Travis CI unterstützt.
kap
3

Normalerweise mag ich das

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

Das git_token liest aus der Variablen config in Azure Devops.

Sie können meinen vollständigen Blog hier lesen

Tony Ngo
quelle
1

Nachdem wir mit diesem Problem fast einen ganzen Tag lang im ORG / REPO-Abschnitt in unserem Build-Skript mit dem gefürchteten Fehler "Remote nicht gefunden" zu kämpfen hatten, fanden wir schließlich eine funktionierende Lösung, um das zu verwenden TRAVIS_REPO_SLUG. Das Einschalten für die fest codierten Attribute funktionierte sofort.

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

Wenn Sie so viele Stunden mit dem Anwenden des GitHub-Tokens zu kämpfen haben, funktioniert es wie folgt:

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

  • Code folgt der Codefresh- Anleitung zum Klonen eines Repos mit Token (Freestyle})
  • Test durchgeführt: Sed %d%H%M auf Matchwort'-123456-whatever'
  • Zurück zum Repo ( privates Repo) )
  • ausgelöst durch DockerHub- Webhooks

Es folgt der vollständige Code:

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

Ausgabe...

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

Das Kennwort, mit dem Sie sich beim github.com-Portal anmelden, funktioniert in VS Code CLI / Shell nicht. Sie sollten das PAT-Token von der URL https://github.com/settings/tokens kopieren, indem Sie ein neues Token generieren und diese Zeichenfolge als Kennwort in die CLI einfügen.

Kanna Reddy
quelle
0

Wenn Sie GitHub Enterprise verwenden und das Repo klonen oder Pushing einen 403-Fehler ausgibt, anstatt nach einem Benutzernamen / Token zu fragen, können Sie Folgendes verwenden:

  1. Löschen Sie das Repo
  2. Öffnen Sie die Eingabeaufforderung und navigieren Sie zu dem Ordner, in dem sich das Repo befinden soll
  3. Art:
git clone https://[USERNAME]:[TOKEN]@[GIT_ENTERPRISE_DOMAIN]/[ORGANIZATION]/[REPO].git
Gigazelle
quelle