Uwierzytelnij się w GitHub za pomocą tokena

118

Próbuję uwierzytelnić się w GitHub przy użyciu osobistego tokenu dostępu. W plikach pomocy na github stwierdza, że ​​do uwierzytelnienia należy użyć metody cURL ( https://help.github.com/articles/creating-an-access-token-for-command-line-use ). Próbowałem tego, ale nadal nie mogę przesłać do GitHub. Należy pamiętać, że próbuję push z nieuwierzytelnionego serwera (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

Ten kod powoduje błędy:

remote: odmowa dostępu anonimowego do scuzzlebuzzle / ol3-1.git.

fatal: uwierzytelnianie nie powiodło się dla „ https://github.com/scuzzlebuzzle/ol3-1.git/ ” ”

sposób na przyszłość
źródło

Odpowiedzi:

192

Twoje curlpolecenie jest całkowicie błędne. Powinieneś używać następującego

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

Poza tym to nie upoważnia twojego komputera do klonowania repozytorium, jeśli w rzeczywistości jest ono prywatne. (Jednak spojrzenie wskazuje, że tak nie jest). Zwykle należy wykonać następujące czynności:

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

Spowoduje to dodanie poświadczeń do pilota utworzonego podczas klonowania repozytorium. Niestety, nie masz kontroli nad tym, jak Travis klonuje twoje repozytorium, więc musisz edytować pilota w ten sposób.

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

To naprawi twój projekt, aby używać pilota z wbudowanymi poświadczeniami.

Ostrzeżenie: Tokeny mają dostęp do odczytu / zapisu i powinny być traktowane jak hasła. Jeśli wprowadzisz swój token w adresie URL klonowania podczas klonowania lub dodawania pilota,Git writes it to your .git/config file in plain text, which is a security risk.

Ian Stapleton Cordasco
źródło
Dziękuję bardzo za Twoją pomoc. Działało świetnie. Oto kopia mojego zmienionego pliku: github.com/scuzzlebuzzle/ol3-1/blob/master/util/s.sh . Mam to dość blisko. Z jakiegoś powodu nie wysłał go do utworzonego przeze mnie katalogu build1, ale nadal został umieszczony w katalogu build, więc zadziałał! DZIĘKI!
przyszłości
1
Nie wiem, o jakim przycisku edytora mówisz, ale usunięcie oryginalnego pilota jest absolutnie konieczne.
Ian Stapleton Cordasco
1
Heh. Chłodny. Miło, że mogłem pomóc.
Ian Stapleton Cordasco
4
Nie musisz rmować pilota, możesz zamiast tego użyć set-url, jak wgit remote set-url origin https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git
berkus
1
Niepewne podejście. Klucz łatwo można było zarejestrować w przypadku błędu. Zamiast tego użyj ściśle określonego klucza wdrażania.
Joseph Lust,
53

Najpierw musisz utworzyć osobisty token dostępu (PAT). Jest to opisane tutaj: https://help.github.com/articles/creating-an-access-token-for-command-line-use/

Co ciekawe, artykuł mówi, jak go stworzyć, ale nie ma absolutnie żadnej wskazówki, co z nim zrobić. Po około godzinie dokumentowania trałowania i przepełnienia stosu w końcu znalazłem odpowiedź:

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

Właściwie byłem zmuszony włączyć uwierzytelnianie dwuskładnikowe zgodnie z polityką firmy, gdy pracowałem zdalnie i nadal miałem lokalne zmiany, więc w rzeczywistości nie było to clonepotrzebne, ale push. Czytałem w wielu miejscach, że potrzebowałem usunąć i odtworzyć pilota, ale w rzeczywistości moje normalne pushpolecenie działało dokładnie tak samo jak clonepowyżej, a pilot się nie zmienił:

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

(@YMHuang umieścił mnie na właściwej ścieżce z linkiem do dokumentacji).

Rzut
źródło
Dzięki za to, ja też miałem to samo zadanie
Surya Prakash Patel
całkiem w porządku.
Samim Aftab Ahmed
Próbowałem kilka razy tego podejścia, ale mam ten sam problem. Wygenerowałem PTA, a następnie próbowałem uwierzytelnić się po wykonaniu polecenia push, umieszczając moją nazwę użytkownika i token. Nadal mówi mi, że poświadczenia są błędne. Czego mi brakuje w tych krokach?
johnny_kb
30

Aby uniknąć przekazania „kluczy do zamku” ...

Zauważ, że odpowiedź sigmavirus24 wymaga, abyś przekazał Travisowi token z dość szerokimi uprawnieniami - ponieważ GitHub oferuje tylko tokeny z szerokim zakresem, takim jak „napisz wszystkie moje publiczne repozytoria” lub „napisz wszystkie moje prywatne repozytoria”.

Jeśli chcesz ograniczyć dostęp (przy odrobinie pracy!), Możesz użyć kluczy wdrożeniowych GitHub w połączeniu z zaszyfrowanymi polami yaml firmy Travis.

Oto szkic tego, jak działa ta technika ...

Najpierw wygeneruj wywołany klucz wdrażania RSA (przez ssh-keygen) my_keyi dodaj go jako klucz wdrażania w ustawieniach repozytorium github.

Następnie...

$ 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

Następnie użyj tego $passwordpliku do odszyfrowania klucza wdrażania w czasie integracji, dodając do pliku 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

Uwaga: ostatnia linia wstępnie wypełnia klucz RSA githuba, co pozwala uniknąć konieczności ręcznego akceptowania w momencie połączenia.

Brednie
źródło
30

Automatyzacja / automatyzacja Git z tokenami OAuth

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

Działa również w git pushpoleceniu.

Źródła: https://help.github.com/articles/git-automation-with-oauth-tokens/

John Huang
źródło
4
Kluczem jest ustawienie git tak, aby nie trzeba było przez cały czas być pytanym o swój token, jak opisano tutaj - help.github.com/articles/caching-your-github-password-in-git Inne odpowiedzi na to pytanie zakończy się zapisaniem tokena w postaci zwykłego tekstu do .git / config, co może być uznane za zagrożenie bezpieczeństwa.
jerome
świetne odniesienie - txs!
dalcam
cudowne dzięki https: // <mytoken> @mygiturl pracował nieźle w moim .git \ config
Tyeth
22

To zadziałało dla mnie przy użyciu ssh :

UstawieniaUstawienia programistyWygeneruj nowy token .

git remote set-url origin https://[APPLICATION]:[NEW TOKEN]@github.com/[ORGANISATION]/[REPO].git
ccreedon1
źródło
2
Działa to również w przypadku osobistych tokenów dostępu w tym formacie:git remote add origin https://[USERNAME]:[NEW TOKEN]@github.com/[USERNAME]/[REPO].git
CommandZ
Musiałem zrobićgit remote add origin https://[USERNAME]:[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git
pacoverflow
Czy to nie jest zły pomysł? Czy token nie zostanie zapisany w pamięci podręcznej w historii konsoli?
TheRealChx101
Pracowałem również dla mnie git remote add origin https: // [TOKEN] @ git.mycompany.com / [ORGANIZATION] / [REPO] .git
Thomas Chafiol
@ TheRealChx101Możesz użyć czegoś takiego jak, git remote set-url origin https://[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git> /dev/null 2>&1aby uniknąć rejestrowania niezabezpieczonych danych wyjściowych git. Przechowuj token w zmiennej, aby uniknąć umieszczania go w dzienniku. Ale trzeba to gdzieś przechowywać. Aby dodatkowo zabezpieczyć, możesz przechowywać je w postaci zaszyfrowanej. Takie podejście jest na przykład obsługiwane przez Travis CI.
kap
3

Zwykle to lubię

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

Git_token odczytuje ze zmiennej config w Azure Devops.

Możesz przeczytać cały mój blog tutaj

Tony Ngo
źródło
1

Po zmaganiu się z tym problemem przez prawie cały dzień twardego kodowania w sekcji ORG / REPO w naszym skrypcie kompilacji, który wyświetlał przerażający błąd „zdalny nie znaleziono”, ostatecznie znalazłem działające rozwiązanie polegające na użyciu TRAVIS_REPO_SLUG. Przełączenie tego na sztywno zakodowane atrybuty zadziałało natychmiast.

git remote set-url origin https://[ORG]:${TOKEN}@github.com/${TRAVIS_REPO_SLUG}
mdmjsh
źródło
0

Mając tyle godzin zmagań z zastosowaniem tokena GitHub, w końcu działa jak poniżej:

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

  • kod postępuje zgodnie ze wskazówkami Codefresh dotyczącymi klonowania repozytorium przy użyciu tokena (freestyle}
  • Test przeprowadzony: sed %d%H%M na dopasowanym słowie'-123456-whatever'
  • wróć do repozytorium (które jest repozytorium prywatnym )
  • wyzwalane przez elementy webhook DockerHub

Poniżej znajduje się pełny kod:

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

Wynik...

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
źródło
0

Hasło używane do logowania się do portalu github.com nie działa w interfejsie wiersza polecenia / powłoki VS Code. Powinieneś skopiować token PAT z adresu URL https://github.com/settings/tokens , generując nowy token i wklej ten ciąg w CLI jako hasło.

Kanna Reddy
źródło
0

Jeśli korzystasz z GitHub Enterprise i klonowanie repozytorium lub wypychanie powoduje błąd 403 zamiast monitowania o nazwę użytkownika / token, możesz użyć tego:

  1. Usuń repozytorium
  2. Otwórz wiersz polecenia i przejdź do folderu, w którym chcesz umieścić repozytorium
  3. Rodzaj:
git clone https://[USERNAME]:[TOKEN]@[GIT_ENTERPRISE_DOMAIN]/[ORGANIZATION]/[REPO].git
Gigazelle
źródło