Bir belirteç kullanarak GitHub ile kimlik doğrulayın


118

Kişisel bir erişim belirteci kullanarak GitHub ile kimlik doğrulamaya çalışıyorum. Github'daki yardım dosyalarında, kimlik doğrulaması için cURL yöntemini kullanmayı belirtir ( https://help.github.com/articles/creating-an-access-token-for-command-line-use ). Bunu denedim ama yine de GitHub'a aktaramıyorum. Lütfen, kimliği doğrulanmamış bir sunucudan (Travis-CI) aktarmaya çalıştığımı unutmayın.

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

Bu kod hatalara neden olur:

remote: scuzzlebuzzle / ol3-1.git'e anonim erişim reddedildi.

önemli: ' https://github.com/scuzzlebuzzle/ol3-1.git/ ' " için kimlik doğrulama başarısız oldu

Yanıtlar:


192

Emriniz curltamamen yanlış. Aşağıdakileri kullanmalısınız

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

Bunun yanı sıra, bu, bilgisayarınıza, eğer aslında özelse, depoyu klonlama yetkisi vermez. (Bununla birlikte, bir göz atmak öyle olmadığını gösterir.) Normalde yapacağınız şey şudur:

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

Bu, kimlik bilgilerinizi depoyu klonlarken oluşturulan uzaktan kumandaya ekleyecektir. Ne yazık ki, ancak, Travis'in deponuzu nasıl klonladığı üzerinde hiçbir kontrole sahip değilsiniz, bu yüzden uzaktan kumandayı bu şekilde düzenlemeniz gerekiyor.

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

Bu, projenizi yerleşik kimlik bilgilerine sahip bir uzaktan kumanda kullanacak şekilde düzeltir.

Uyarı: Belirteçlerin okuma / yazma erişimi vardır ve parola gibi işlem görmelidir. Bir uzaktan kumanda klonlarken veya eklerken jetonunuzu klon URL'sine girerseniz,Git writes it to your .git/config file in plain text, which is a security risk.


Yardımın için çok teşekkür ederim. Harika çalıştı. İşte değiştirilen dosyamın bir kopyası: github.com/scuzzlebuzzle/ol3-1/blob/master/util/s.sh . Oldukça yakın anladım. Bazı nedenlerden dolayı oluşturduğum build1 dizinine itmedi, ancak yine de build dizinine itti, bu yüzden çalıştı! TEŞEKKÜRLER!
wayofthefuture

1
Hangi editör düğmesinden bahsettiğinizi bilmiyorum ama orijinal uzaktan kumandayı çıkarmak kesinlikle gerekli.
Ian Stapleton Cordasco

1
Heh. Güzel. Yardımcı olduğuma sevindim.
Ian Stapleton Cordasco

4
Uzaktan kumandayı çalıştırmanıza gerek yok, bunun yerine set-url'yi kullanabilirsinizgit remote set-url origin https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git
berkus

1
Güvensiz yaklaşım. Anahtar, hatayı kaydetmek için kolayca yapılabilir. Bunun yerine kapsamlı bir dağıtım anahtarı kullanın.
Joseph Lust

54

Öncelikle, kişisel bir erişim belirteci (PAT) oluşturmanız gerekir. Bu, burada açıklanmaktadır: https://help.github.com/articles/creating-an-access-token-for-command-line-use/

Gülünç bir şekilde, makale size onu nasıl yaratacağınızı anlatıyor, ancak onunla ne yapılacağı konusunda kesinlikle hiçbir ipucu vermiyor. Yaklaşık bir saatlik trol dokümantasyonu ve Stack Overflow'dan sonra nihayet cevabı buldum:

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

Aslında , uzaktan çalışırken ve hala yerel değişiklikler yaparken şirket politikasına göre iki faktörlü kimlik doğrulamayı etkinleştirmek zorunda kaldım, bu yüzden aslında buna cloneihtiyacım yoktu , ama push. Uzaktan kumandayı silmem ve yeniden oluşturmam gereken birçok yerde okudum, ancak aslında normal pushkomutum tamamen cloneyukarıdakilerle aynı şekilde çalıştı ve uzaktan kumanda değişmedi:

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

(@YMHuang, dokümantasyon bağlantısı ile beni doğru yola koydu.)


Bunun için teşekkürler, ben de aynı görevle karşı karşıyaydım
Surya Prakash Patel

gayet iyi.
Samim Aftab Ahmed

Bu yaklaşımı birkaç kez denedim, ancak aynı sorunla karşı karşıyayım. PTA'yı oluşturdum ve ardından push komutunu çalıştırdıktan sonra kullanıcı adımı ve simgemi koyarak kimlik doğrulaması yapmaya çalıştım. Hala bana kimlik bilgilerinin yanlış olduğunu söylüyor. Bu adımlarda neyi kaçırıyorum?
johnny_kb

30

"Kalenin anahtarlarını" teslim etmemek için ...

Sigmavirus24'ün yanıtının Travis'e oldukça geniş izinlere sahip bir belirteç vermenizi gerektirdiğini unutmayın - GitHub yalnızca "tüm genel depolarımı yaz" veya "tüm özel depolarımı yaz" gibi geniş kapsamlara sahip belirteçler sunar.

Erişimi daraltmak istiyorsanız (biraz daha çalışarak!) Travis şifreli yaml alanlarıyla birlikte GitHub dağıtım anahtarlarını kullanabilirsiniz.

İşte tekniğin nasıl çalıştığına dair bir taslak ...

Önce, ssh-keygençağrılan bir RSA dağıtım anahtarı (aracılığıyla ) oluşturun my_keyve bunu github depo ayarlarınıza bir dağıtım anahtarı olarak ekleyin.

Sonra...

$ 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

Ardından $password, yaml dosyanıza ekleyerek entegrasyon sırasında konuşlandırma anahtarınızın şifresini çözmek için dosyayı kullanın:

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

Not: son satır, github'ın RSA anahtarını önceden doldurur, bu da bağlantı anında manuel olarak kabul etme ihtiyacını ortadan kaldırır.


30

OAuth belirteçleri ile otomasyon / Git otomasyonu

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

Aynı zamanda git pushkomutta da çalışır .

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


4
Anahtar, git'i burada açıklandığı gibi her zaman belirteçinizin sorulmasına gerek kalmayacak şekilde ayarlamaktır - help.github.com/articles/caching-your-github-password-in-git Bu sorunun diğer yanıtları belirtecinizi düz metin olarak .git / config'e yazmanız bir güvenlik riski olarak değerlendirilebilir.
jerome

harika referans - txs!
dalcam

çok güzel teşekkürler https: // <mytoken> @mygiturl .git \ config
Tyeth

22

Bu benim için ssh kullanarak çalıştı :

AyarlarGeliştirici ayarlarıYeni jeton oluştur .

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

2
Bu, şu biçimi kullanan kişisel erişim belirteçleri için de geçerlidir:git remote add origin https://[USERNAME]:[NEW TOKEN]@github.com/[USERNAME]/[REPO].git
CommandZ

Yapmam gerekiyordugit remote add origin https://[USERNAME]:[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git
pacoverflow

Bu kötü bir fikir değil mi? Belirteç, konsol geçmişinde önbelleğe alınmayacak mı?
TheRealChx101

Ayrıca benim için çalıştı git uzaktan kaynak ekle https: // [TOKEN] @ git.mycompany.com / [ORGANİZASYON] / [REPO] .git
Thomas Chafiol

@ TheRealChx101 git remote set-url origin https://[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git> /dev/null 2>&1Güvenli olmayan git çıktısının günlüğe kaydedilmesini önlemek gibi bir şey kullanabilirsiniz . Günlükte olmasını önlemek için belirteci bir değişkende saklayın. Ama bir yerde saklanması gerekiyor. Daha fazla güvenlik sağlamak için şifreli olarak saklayabilirsiniz. Bu yaklaşım, örneğin Travis CI tarafından desteklenmektedir.
kap

3

Normalde bunu severim

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

Git_token, Azure devops'taki değişken yapılandırmadan okuyor.

Sen benim tam blog okuyabilir burada


1

ORG / REPO bölümünde, derleme komut dosyamıza neredeyse tam bir tam gün kodlama yapmak için bu sorunla mücadele ettikten sonra, korkunç 'uzaktan bulunamadı' hatasını alarak, sonunda TRAVIS_REPO_SLUG. Kodlanmış öznitelikler için bunu değiştirmek hemen işe yaradı.

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

0

GitHub belirtecini uygulamak için saatlerce mücadele ederek nihayet aşağıdaki gibi çalışıyor:

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

  • kod , jeton (serbest stil} kullanarak bir depoyu klonlamayla ilgili Codefresh kılavuzunu izler
  • gerçekleştirilen test: eşleşme kelimesinde sed %d%H%M'-123456-whatever'
  • depoya geri itin ( özel repo olan )
  • DockerHub web kancaları tarafından tetiklenir

Tam kod aşağıdadır:

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

Çıktı...

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

Github.com portalında oturum açmak için kullandığınız parola VS Code CLI / Shell'de çalışmaz. PAT Belirteçini https://github.com/settings/tokens URL'sinden yeni belirteç oluşturarak kopyalamanız ve bu dizeyi şifre olarak CLI'ye yapıştırmanız gerekir.


0

GitHub Enterprise kullanıyorsanız ve depoyu klonlamak veya zorlamak size bir kullanıcı adı / belirteç sormak yerine 403 hatası veriyorsa, bunu kullanabilirsiniz:

  1. Depoyu sil
  2. Komut istemini açın ve deponun içinde olmasını istediğiniz klasöre gidin.
  3. Tür:
git clone https://[USERNAME]:[TOKEN]@[GIT_ENTERPRISE_DOMAIN]/[ORGANIZATION]/[REPO].git
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.