Mengautentikasi dengan GitHub menggunakan token

118

Saya mencoba mengautentikasi dengan GitHub menggunakan token akses pribadi. Dalam file bantuan di github, dinyatakan menggunakan metode cURL untuk mengautentikasi ( https://help.github.com/articles/creating-an-access-token-for-command-line-use ). Saya telah mencoba ini, tetapi saya masih tidak dapat mendorong ke GitHub. Harap dicatat, saya mencoba untuk mendorong dari server yang tidak diautentikasi (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

Kode ini menyebabkan kesalahan:

remote: Akses anonim ke scuzzlebuzzle / ol3-1.git ditolak.

fatal: Otentikasi gagal untuk ' https://github.com/scuzzlebuzzle/ol3-1.git/ ' "

cara masa depan
sumber

Jawaban:

192

curlPerintah Anda sepenuhnya salah. Anda harus menggunakan yang berikut ini

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

Selain itu, itu tidak mengizinkan komputer Anda untuk mengkloning repositori jika sebenarnya itu pribadi. (Namun, jika dilihat, menunjukkan bahwa itu tidak benar.) Apa yang biasanya Anda lakukan adalah sebagai berikut:

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

Itu akan menambahkan kredensial Anda ke remote yang dibuat saat mengkloning repositori. Sayangnya, bagaimanapun, Anda tidak memiliki kendali atas bagaimana Travis mengkloning repositori Anda, jadi Anda harus mengedit kendali jarak jauh seperti itu.

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

Itu akan memperbaiki proyek Anda untuk menggunakan remote dengan kredensial bawaan.

Peringatan: Token memiliki akses baca / tulis dan harus diperlakukan seperti sandi. Jika Anda memasukkan token Anda ke dalam kloning URL saat mengkloning atau menambahkan remote,Git writes it to your .git/config file in plain text, which is a security risk.

Ian Stapleton Cordasco
sumber
Terima kasih banyak atas bantuan Anda. Ini bekerja dengan baik. Ini adalah salinan dari file saya yang diubah: github.com/scuzzlebuzzle/ol3-1/blob/master/util/s.sh . Saya sudah cukup dekat. Untuk beberapa alasan itu tidak mendorong ke direktori build1 yang saya buat, tetapi masih didorong ke direktori build sehingga berfungsi! TERIMA KASIH!
wayofthefuture
1
Saya tidak tahu tombol editor apa yang Anda bicarakan tetapi menghapus remote asli mutlak diperlukan.
Ian Stapleton Cordasco
1
Heh. Keren. Senang untuk membantu.
Ian Stapleton Cordasco
4
Anda tidak perlu menggunakan remote, Anda dapat menggunakan set-url, seperti dalamgit remote set-url origin https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git
berkus
1
Pendekatan tidak aman. Kunci mudah digunakan untuk log on error. Gunakan kunci penerapan dengan cakupan yang ketat.
Joseph Lust
53

Pertama, Anda perlu membuat token akses pribadi (PAT). Ini dijelaskan di sini: https://help.github.com/articles/creating-an-access-token-for-command-line-use/

Anehnya, artikel tersebut memberi tahu Anda cara membuatnya, tetapi sama sekali tidak memberi petunjuk apa yang harus dilakukan dengannya. Setelah sekitar satu jam mempelajari dokumentasi dan Stack Overflow, saya akhirnya menemukan jawabannya:

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

Saya sebenarnya dipaksa untuk mengaktifkan otentikasi dua faktor oleh kebijakan perusahaan saat saya bekerja dari jarak jauh dan masih memiliki perubahan lokal, jadi sebenarnya itu bukan yang clonesaya butuhkan, tetapi push. Saya membaca di banyak tempat bahwa saya perlu menghapus dan membuat ulang remote, tetapi pada kenyataannya pushperintah normal saya bekerja persis sama seperti di cloneatas, dan remote tidak berubah:

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

(@YMHuang menempatkan saya di jalur yang benar dengan tautan dokumentasi.)

Eselon
sumber
Terima kasih untuk itu, saya juga menghadapi tugas yang sama
Surya Prakash Patel
sangat baik.
Samim Aftab Ahmed
Saya mencoba beberapa kali pendekatan ini, tetapi saya menghadapi masalah yang sama. Saya membuat PTA dan kemudian mencoba mengotentikasi setelah eksekusi perintah push, memasukkan nama pengguna dan token saya. Itu masih memberi tahu saya bahwa kredensial salah. Apa yang saya lewatkan dalam langkah-langkah ini?
johnny_kb
30

Untuk menghindari penyerahan "kunci kastil" ...

Perhatikan bahwa respons sigmavirus24 mengharuskan Anda memberi Travis token dengan izin yang cukup luas - karena GitHub hanya menawarkan token dengan cakupan luas seperti "tulis semua repo publik saya" atau "tulis semua repo pribadi saya".

Jika Anda ingin mempersempit akses (dengan sedikit lebih banyak pekerjaan!), Anda dapat menggunakan kunci penerapan GitHub yang dikombinasikan dengan bidang yaml terenkripsi Travis.

Berikut adalah sketsa cara kerja teknik tersebut ...

Pertama buat kunci penerapan RSA (melalui ssh-keygen) yang dipanggil my_keydan tambahkan sebagai kunci penerapan di setelan repo github Anda.

Kemudian...

$ 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

Kemudian gunakan $passwordfile tersebut untuk mendekripsi kunci penerapan Anda pada waktu integrasi, dengan menambahkan ke file yaml Anda:

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

Catatan: baris terakhir sudah mengisi kunci RSA github, yang menghindari kebutuhan untuk menerima secara manual pada saat membuat koneksi.

Omong kosong
sumber
30

Otomatisasi / otomatisasi Git dengan token OAuth

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

Ini juga bekerja dalam git pushperintah.

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

John Huang
sumber
4
Kuncinya adalah mengatur git sehingga Anda tidak perlu selalu diminta untuk token Anda, seperti yang dijelaskan di sini - help.github.com/articles/caching-your-github-password-in-git Jawaban lain untuk pertanyaan ini akan berakhir dengan menulis token Anda dalam teks biasa ke .git / config yang dapat dianggap sebagai risiko keamanan.
jerome
referensi bagus - txs!
dalcam
terima kasih yang indah https: // <mytoken> @mygiturl bekerja dengan baik di .git \ config saya
Tyeth
22

Ini berfungsi untuk saya menggunakan ssh :

PengaturanPengaturan pengembangBuat token baru .

git remote set-url origin https://[APPLICATION]:[NEW TOKEN]@github.com/[ORGANISATION]/[REPO].git
ccreedon1
sumber
2
Ini juga berfungsi untuk token akses pribadi menggunakan format ini:git remote add origin https://[USERNAME]:[NEW TOKEN]@github.com/[USERNAME]/[REPO].git
CommandZ
Saya harus melakukannyagit remote add origin https://[USERNAME]:[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git
pacoverflow
Bukankah ini ide yang buruk? Apakah token tidak akan di-cache dalam riwayat konsol?
TheRealChx101
Juga bekerja untuk saya, git remote add origin https: // [TOKEN] @ git.mycompany.com / [ORGANIZATION] / [REPO] .git
Thomas Chafiol
@ TheRealChx101Anda dapat menggunakan sesuatu seperti git remote set-url origin https://[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git> /dev/null 2>&1untuk menghindari pencatatan hasil git yang tidak aman. Simpan token dalam variabel agar tidak ada di log. Tapi itu perlu disimpan di suatu tempat. Untuk mengamankan lebih lanjut Anda dapat menyimpannya dienkripsi. Pendekatan ini misalnya didukung oleh Travis CI.
kap
3

Biasanya saya melakukan seperti ini

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

Git_token membaca dari konfigurasi variabel di devops azure.

Anda dapat membaca blog lengkap saya di sini

Tony Ngo
sumber
1

Setelah berjuang dengan masalah ini selama hampir seharian penuh melakukan pengkodean keras di bagian ORG / REPO ke dalam skrip build kami mendapatkan kesalahan 'remote not found' yang ditakuti, akhirnya menemukan solusi yang berfungsi untuk menggunakan TRAVIS_REPO_SLUG. Mengalihkan ini untuk atribut hardcode langsung bekerja.

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

Dengan berjuang berjam-jam untuk menerapkan token GitHub akhirnya berfungsi seperti di bawah ini:

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

  • kode mengikuti panduan Codefresh tentang kloning repo menggunakan token (freestyle}
  • tes dilakukan: sed %d%H%M pada kata pertandingan'-123456-whatever'
  • mendorong kembali ke repo (yang merupakan repo pribadi )
  • dipicu oleh webhook DockerHub

Berikut kode lengkapnya:

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

Keluaran...

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

Kata sandi yang Anda gunakan untuk masuk ke portal github.com tidak berfungsi di VS Code CLI / Shell. Anda harus menyalin Token PAT dari URL https://github.com/settings/tokens dengan membuat token baru dan menempelkan string itu di CLI sebagai kata sandi.

Kanna Reddy
sumber
0

Jika Anda menggunakan GitHub Enterprise dan mengkloning repo atau mendorong memberi Anda kesalahan 403 alih-alih meminta nama pengguna / token, Anda dapat menggunakan ini:

  1. Hapus repo
  2. Buka command prompt dan arahkan ke folder tempat Anda ingin repo
  3. Tipe:
git clone https://[USERNAME]:[TOKEN]@[GIT_ENTERPRISE_DOMAIN]/[ORGANIZATION]/[REPO].git
Gigazelle
sumber