Autentikasi Git gagal setelah mengaktifkan 2FA

99

Saya baru saja mengaktifkan 2FA (Saya tidak dapat memikirkan perubahan lain yang saya buat) dan git meminta nama pengguna dan kata sandi saya. Saya menyediakan keduanya, tetapi mereka "salah". Saya mencoba banyak solusi di sini: Git push memerlukan nama pengguna dan kata sandi tetapi tidak berhasil. Secara khusus, saat beralih dari https ke ssh, kunci ssh memberi

Izin ditolak (publickey). fatal: Tidak dapat membaca dari repositori jarak jauh.

$ git push
warning: push.default is unset; its implicit value is changing in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the current behavior after the default changes, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)

Username for 'https://github.com': **********
Password for 'https://[email protected]': 
remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/mlbileschi/scala.git/'

Ada tips?

Max Bileschi
sumber
1
"Izin ditolak (publickey). Fatal: Tidak dapat membaca dari repositori jarak jauh." adalah masalah terpisah yang dapat diselesaikan dengan menyiapkan kunci SSH untuk akun Anda: help.github.com/articles/…
Ajedi32
1
sering kali ini bukan masalah 2FA tetapi diselesaikan dengan mengubah dari https ke git
SCBuergel.eth

Jawaban:

130

Anda perlu membuat token akses. Anda dapat membuatnya dengan membuka halaman pengaturan Anda .

masukkan deskripsi gambar di sini

Gunakan token akses ini sebagai kata sandi Anda di baris perintah.

Gergo Erdosi
sumber
hm, saya mencobanya setelah set-url ke https, dan tidak berhasil. Saya juga mencoba set-url kembali ke ssh, dan menghapus entri .ssh / known_hosts, tetapi tidak berhasil.
Max Bileschi
Bisakah Anda menambahkan output baris perintah ke pertanyaan Anda? Termasuk perintah yang Anda jalankan.
Gergo Erdosi
Output ditambahkan
Max Bileschi
Saya mengalami masalah aneh di mana saya harus memulai klon dan memasukkan token akses baru saya. Setelah ini (bahkan tanpa menunggu klon selesai) saya dapat memberikan token akses baru saya ke direktori asli yang saya coba jalankan git pull. Mungkin masalah lokal, tetapi ini dapat membantu seseorang.
sg
Saya mendapatkan The requested URL returned error: 403ketika saya menggunakan token untuk kata sandi, untuk mendorong https
stelios
39

Solusi ujung ke ujung membutuhkan 3 langkah.

  1. Kudos to Gergo Erdosi. Jawabannya sebagian besar benar, hanya saja Github mengubah halaman pengaturan itu. Mulai akhir 2016, Anda perlu membuat token akses dari halaman Token akses pribadi Anda .

    masukkan deskripsi gambar di sini

    Gunakan token akses ini sebagai kata sandi Anda di baris perintah.

  2. Anda dapat mempertahankan nama pengguna Anda dengan memasukkannya ke dalam url jarak jauh proyek Anda. Salah satu cara untuk melakukannya adalah dengan mengedit baris Anda .git/configuntuk mengubah urlke dalam format berikut:

    url = https://[email protected]/owner/repo.git

  3. Anda dapat mempertahankan kata sandi Anda dengan menjalankan ini untuk satu kali saja:

    $ git config credential.helper store

    dan kemudian sandi git Anda di masa mendatang akan disimpan dalam ~ / .git-credentials, dalam teks biasa, menggunakan format https://user:[email protected].

    Menyimpan kata sandi dalam teks biasa biasanya akan dianggap sebagai risiko keamanan. Tetapi dalam kasus 2FA ini, kredensial BUKAN kata sandi Anda yang sebenarnya, itu adalah string yang dibuat secara acak. Jadi seaman menggunakan kunci pribadi ssh, kunci pribadi ssh tanpa frasa sandi. PERHATIAN: perlu diingat bahwa, jika Anda kebetulan juga menggunakan akun git lain tanpa 2FA di mesin ini, kata sandi asli itu juga akan disimpan dalam teks biasa.

PS: Sebagai alternatif, Anda dapat memilih untuk menggunakan login berbasis ssh, menggunakan kunci pribadi ssh yang dilindungi frase sandi, yang akan lebih aman dan kurang nyaman, tetapi itu berada di luar cakupan jawaban ini.

RayLuo
sumber
1
ini bekerja untuk saya dan memungkinkan saya untuk tidak perlu mengetikkan un dan pw setiap kali saya berinteraksi dengan git. saya menggunakan windows dengan cygwin dan tidak pernah bisa mengaktifkan kunci ssh - ini bisa!
liltitus 27
tentang para terakhir: ...the credential is NOT your real password, it is a randomly generated string. So it is as secure as using ssh private key.- itu tidak benar sama sekali . Kunci SSH dapat dengan mudah dilindungi dengan frasa sandi di luar kotak. Biasa ~./git-credentials- sama sekali tidak diamankan!
maxkoryukov
Selain itu, API KEY yang disimpan dalam file teks biasa ini memungkinkan untuk: mengakses GitHub API (bergantung pada cakupan, tetapi mungkin, setiap orang yang memiliki apikey akan memiliki akses ke kode sumber repo) dan melakukan operasi git apa pun (push, pull). Dengan kata lain, file teks biasa seperti itu adalah hadiah yang luar biasa, terutama jika Anda memiliki akses ke repositori pribadi (mungkin, repositori tersebut akan segera menjadi publik)
maxkoryukov
@maxkoryukov Oke, bagaimana kalau saya mengubah kalimat terakhir sebagai "seaman menggunakan kunci pribadi ssh tanpa frasa"? Karena inti dari langkah 3 mencoba untuk melewati prompt untuk kata sandi (dengan asumsi Anda bekerja di komputer Anda sendiri, tentu saja). Dalam kasus seperti itu, jika seseorang berhasil mendapatkan ~ / .git-credentials ATAU kunci pribadi ssh tanpa frasa sandi Anda, konsekuensinya akan sama. Saya setuju dengan Anda bahwa kunci ssh yang dilindungi frasa sandi akan lebih aman (dan kurang nyaman).
RayLuo
@RayLuo, LGFM;)
maxkoryukov
16

Saya punya masalah serupa. Saya harus mengubah url yang digunakan dalam perintah git untuk memasukkan nama pengguna saya.

git push https://[email protected]/mlbileschi/scala.git

Kemudian ketika diminta untuk PW gunakan token akses yang Anda buat dari mengikuti petunjuk di jawaban Gergo Erdosi.

Pelawak
sumber
1
ini berfungsi untuk saya, tetapi jika saya mencoba untuk mengatur git remote set-url --push origindengan nilai yang sama, maka git push origin mastermasih gagal.
Danimal
Juga berfungsi untuk saya setelah memasukkan nama pengguna saya di jalur jarak jauh seperti yang dijelaskan oleh Jester.
ovo
Ini tidak berhasil untuk saya di command prompt windows, tetapi di dalam git-bashberfungsi dengan baik
Vincent Tang
Bekerja dengan sempurna untuk saya di Ubuntu. Terima kasih!
Ryan Russell
12

Di linux, Anda dapat mengautentikasi identitas GitHub Anda menggunakan kunci SSH.

1) Menghasilkan kunci SSH baru ( sumber )

Buka terminal.

Tempel teks di bawah ini, gantikan alamat email GitHub Anda.

ssh-keygen -t rsa -b 4096 -C "[email protected]"

Ini membuat kunci ssh baru, menggunakan email yang disediakan sebagai label.


2) Menautkan kunci ke akun GitHub Anda

Buka terminal dan salin kunci publik yang dihasilkan

cat ~/.ssh/id_rsa.pub

Harus menampilkan sesuatu sebagai

ssh-rsa AAAAB3NzaC1y ... mKAKw== [email protected]

Arahkan ke https://github.com/settings/keys dan klik New SSH Key, beri Judul dan salin-tempel kunci publik.

masukkan deskripsi gambar di sini


3) Ubah git origin dari https://menjadissh

Buka terminal, cdke lokasi dan tipe repositori Anda

git remote set-url origin [email protected]:<github username>/<repository name>
Jossef Harush
sumber
1
Benar, tapi tidak relevan dengan pertanyaan itu. Otentikasi via httpsterkadang berguna, misalnya ketika tetap upstream selama httpspercabangan Anda berakhir ssh, sehingga Anda menghindari mendorong ke upstream secara tidak sengaja, karena httpsakan meminta sandi dan mengingatkan Anda bahwa Anda menargetkan repo
stelios yang
Anda tidak perlu linux untuk menggunakan SSH. Menggunakan SSH adalah jawaban yang lebih baik untuk Windows juga menurut saya. Alat yang umum digunakan untuk windows adalah Pagaent dan Putty
Andrew
3

Ini berhasil untuk saya:

  • Buka [your-git-repo] /. Git / config

  • Di bawah [remote "origin"]Ubah URLkunci dari protokol http ke git.

Contoh

Jika nilainya urladalah https://github.com/ .git ubah ke[email protected]:<repo-url>.git

imsinu9.dll
sumber
3

Jika Anda sudah menggunakan kunci ssh, setelah mengaktifkan 2FA itu akan memaksa Anda untuk membaca / menulis jarak jauh dengan SSH. Anda tidak benar-benar perlu menambahkan token pribadi, tetapi tetap menggunakan pasangan kunci SSH yang ada.

Ubah saja url jarak jauh Anda dari HTTPS ke SSH:

git remote set-url origin [email protected]:<github-username>/<repo-name>
Sakhi Mansoor
sumber
0

Saya menghadapi masalah ini pada repo yang ada ketika saya mengaktifkan 2FA (otentikasi dua faktor) untuk salah satu repo pribadi saya. Saya dapat menyelesaikannya dengan mengikuti langkah-langkah di bawah ini di terminal ubuntu 19.0 saya: -

  1. Tambahkan kunci ssh Anda ke github sehingga Anda tidak perlu menggunakan kata sandi Anda lagi, karena sekarang Anda telah mengaktifkan 2FA. Kunjungi halaman github untuk mengetahui cara melakukannya dengan mudah.
  2. Setelah kunci ditambahkan, buka terminal Anda, dan perbarui url asal

    git remote set-url origin [email protected]:<USERNAME>/<BRANCH-NAME>

Itu saja. Semoga membantu

Milind
sumber