2FA etkinleştirildikten sonra Git kimlik doğrulaması başarısız oluyor


102

Az önce 2FA'yı etkinleştirdim (yaptığım diğer değişiklikleri düşünemiyorum) ve git kullanıcı adımı ve şifremi istedi. İkisini de sağladım ama "yanlıştı" Buradaki çözümlerin çoğunu denedim: Git push için kullanıcı adı ve şifre gerekiyor ama bu işe yaramadı. Özellikle, https'den ssh'ye geçerken ssh anahtarı,

İzin reddedildi (publickey). ölümcül: Uzak depodan okunamadı.

$ 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://mlbileschi@github.com': 
remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/mlbileschi/scala.git/'

Herhangi bir ipucu?


1
"İzin reddedildi (publickey). Önemli: Uzak depodan okunamadı." hesabınız için bir SSH anahtarı ayarlayarak çözülebilecek ayrı bir sorundur: help.github.com/articles/…
Ajedi32

1
Çoğu zaman bu bir 2FA sorunu değildir, bunun yerine
https'den git'e geçerek çözülür

Yanıtlar:


137

Bir erişim belirteci oluşturmanız gerekiyor. Ayarlar sayfanıza giderek bir tane oluşturabilirsiniz .

görüntü açıklamasını buraya girin

Bu erişim belirtecini komut satırında parolanız olarak kullanın.


hm, bunu https'ye set-url'den sonra denedim ve işe yaramadı. Ayrıca set-url'yi ssh'a geri döndürmeyi ve .ssh / bilinen_hosts girişini kaldırmayı denedim, ancak boşuna.
Max Bileschi

Komut satırı çıktısını sorunuza ekleyebilir misiniz? Yürüttüğünüz komutlar dahil.
Gergo Erdosi

Çıktı eklendi
Max Bileschi

Bir klona başlamam ve yeni erişim belirtecimi girmem gereken garip bir sorun yaşadım. Bundan sonra (klonun bitmesini bile beklemeden) yeni erişim simgemi, çalıştırmaya çalıştığım orijinal dizinime verebildim git pull. Muhtemelen yerel bir sorun, ancak bu birisine yardımcı olabilir.
sg

Elde The requested URL returned error: 403ben https üzerinden bir itme için, şifre belirteci kullandığınızda
stelios

39

Uçtan uca bir çözüm 3 adımda gerçekleşir.

  1. Gergo Erdosi'ye tebrikler. Cevabı büyük ölçüde doğru, sadece Github bu ayar sayfasını değiştiriyor. Geç 2016 olarak, gerek jetonun bir erişim oluşturmak için gelen Kişisel erişim sayfasını belirteçleri .

    görüntü açıklamasını buraya girin

    Bu erişim belirtecini komut satırında parolanız olarak kullanın.

  2. Kullanıcı adınızı proje uzak url'nize ekleyerek kalıcı hale getirebilirsiniz. Bunu yapmanın yollarından biri .git/config, urlsatırınızı aşağıdaki biçime göre değiştirmektir:

    url = https://YOUR_USERNAME_HERE@github.com/owner/repo.git

  3. Şifrenizi yalnızca bir kez çalıştırarak kalıcı hale getirebilirsiniz:

    $ git config credential.helper store

    ve sonra gelecekteki git parolalarınız ~ / .git-kimlik bilgileri biçiminde, biçim kullanılarak düz metin olarak saklanacaktır https://user:PlaintextPassword@example.com.

    Parolaları düz metin olarak saklamak normalde bir güvenlik riski olarak kabul edilir. Ancak bu 2FA durumunda, kimlik bilgileri gerçek şifreniz DEĞİL, rastgele oluşturulmuş bir dizedir. Bu nedenle, bir ssh özel anahtarı ve şifresiz ssh özel anahtarı kullanmak kadar güvenlidir . CAVEAT: Bu makinede 2FA olmayan başka bir git hesabını / hesaplarını kullanırsanız, bu gerçek şifrelerin de düz metin olarak saklanacağını unutmayın.

Not: Alternatif olarak, parola korumalı bir ssh özel anahtarı kullanarak ssh tabanlı oturum açmayı seçebilirsiniz, bu daha güvenli ve daha az kullanışlı olacaktır, ancak bu yanıtın kapsamı dışındadır.


1
bu benim için çalıştı ve git ile her etkileşimde bulunduğumda un ve pw yazmak zorunda kalmamamı sağladı. cygwin ile windows kullanıyorum ve ssh anahtarlarını hiçbir zaman çalıştıramadım - bu işe yarıyor!
liltitus27

son para hakkında: ...the credential is NOT your real password, it is a randomly generated string. So it is as secure as using ssh private key.- bu hiç doğru değil . SSH anahtarları , kutudan çıkar çıkmaz parola ile kolayca korunabilir . Düz ~./git-credentials- hiç güvenli değil!
maxkoryukov

dahası, düz metin dosyasında saklanan bu API ANAHTARI şunlara izin verir: GitHub API'ye erişme (kapsama bağlıdır, ancak muhtemelen, apikey'e sahip olan herkesin repo kaynak koduna erişimi olacaktır) ve herhangi bir git işlemini (itme, çekme) gerçekleştirme. Diğer bir deyişle, bu tür düz metin size özel depolarına doğru bir erişiminiz varsa dosya (muhtemelen, çok yakında halk olacak), özellikle, bir müthiş armağandır
maxkoryukov

@maxkoryukov Tamam, son cümleyi "parolasız ssh özel anahtarı kullanmak kadar güvenli" olarak yeniden yazsam nasıl olur? Çünkü 3. adımın tüm amacı, bir parola istemini atlamaya çalışmaktır (elbette kendi bilgisayarınızda çalıştığınızı varsayarak). Böyle bir durumda, birisi ~ / .git-kimlik bilgilerinizi VEYA parolasız ssh özel anahtarınızı ele geçirmeyi başarırsa, sonuç aynı olacaktır. Parola korumalı bir ssh anahtarının daha güvenli (ve daha az kullanışlı) olacağı konusunda sizinle aynı fikirdeyim.
RayLuo

@RayLuo, LGFM;)
maxkoryukov

17

Benzer bir problemim vardı. Kullanıcı adımı eklemek için git komutunda kullanılan url'yi değiştirmek zorunda kaldım.

git push https://YOUR_USERNAME_HERE@github.com/mlbileschi/scala.git

Ardından PW istediğinde, Gergo Erdosi'nin cevabındaki talimatları izleyerek oluşturduğunuz erişim jetonunu kullanın.


1
bu benim için çalışıyor, ancak git remote set-url --push originaynı değeri ayarlamaya çalışırsam , git push origin masteryine de başarısız olur.
Danimal

Jester tarafından açıklandığı gibi uzak yola kullanıcı adımı ekledikten sonra da benim için çalışıyor.
ovo

Bu benim için Windows komut isteminde işe yaramadı, ancak içeride git-bashyine de iyi çalıştı
Vincent Tang

Ubuntu'da benim için mükemmel çalıştı. Teşekkürler!
Ryan Russell

Jetonu doğrudan https: // <token> @github ... adresinde kullanırsanız hala çalışır
Patrick Mutuku

14

Bir SSH anahtarı ayarlayabilirsiniz (hem Linux hem de Windows'ta)

💡 Windows kullanıcıları için not Ortam değişkeninin kullanıcı dizininde tanımlandığından ve ayarlandığından
emin olun HOME,
örn. C:\Users\jossef( Daha fazlasını öğrenin )


1) Yeni bir SSH anahtarı oluşturma ( kaynak )

Terminal / cmd'yi açın ve aşağıdaki metni yapıştırın (GitHub e-posta adresinizle değiştirin)

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

2) Genel anahtarı GitHub hesabınıza bağlayın

  • Linux / macOS'ta, terminalde çalıştırın:

    cat ~/.ssh/id_rsa.pub
    
  • Windows'ta cmd'de çalıştırın:

    type %HOME%\.ssh\id_rsa.pub
    

Bu, genel anahtarı çıkaracaktır:

ssh-rsa AAAAB3NzaC1y ... mKAKw== your_email@example.com

Https://github.com/settings/keys adresine gidin

  • Tıklayın New SSH Key
  • Bir başlık verin
  • Genel anahtarı önceki komut çıktısından kopyalayıp yapıştırın

görüntü açıklamasını buraya girin


3) git kaynağını olarak https://değiştirssh

Terminal / cmd'yi ve cdklonlanmış depo dizininizi açın ve çalıştırın:

git remote set-url origin git@github.com:<github username>/<repository name>

1
Doğru, ama soruyla alakasız. Üzerinden kimlik doğrulaması httpsbazen yararlıdır, örneğin httpsçatalınız üzerindeyken yukarı akışta tutarken ssh, yanlışlıkla yukarı akışa zorlamaktan kaçınmanız için, çünkü httpsşifre sorulacak ve yanlış
depoyu

3

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

  • [Git-deponuz] /. Git / config sayfasına gidin

  • Anahtarı http protokolünden git olarak [remote "origin"]değiştir altında URL.

Misal

Değeri https://github.com/ .git urlise , şu şekilde değiştirin:git@github.com:<repo-url>.git


3

Zaten ssh anahtarlarını kullanıyorsanız, 2FA'yı etkinleştirdikten sonra, sizi SSH ile uzaktan okuma / yazma zorunluluğu getirecektir. Mevcut SSH anahtar çiftinizi kullanmaya devam etmek yerine kişisel belirteçler eklemenize gerçekten gerek yok.

Uzak url'nizi HTTPS'den SSH'ye değiştirmeniz yeterlidir:

git remote set-url origin git@github.com:<github-username>/<repo-name>

0

Bu, Github'da 2FA'yı etkinleştirdikten sonra benim için çalıştı:

  1. Kişisel Erişim Jetonu oluşturun: https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line .
    NOT: Belirteç için doğru izinleri seçmeyi unutmayın.

  2. Çalıştır:
    git clone https://github.com/username/repo.git
    Kullanıcı Adı: your_username
    Şifre:your_token

Daha fazla okuma: https://help.github.com/en/github/using-git/which-remote-url-should-i-use


0

Özel depolarımdan biri için 2FA'yı (iki faktörlü kimlik doğrulama) etkinleştirdiğimde mevcut depoda bu sorunla karşılaşıyordum. Bunu ubuntu 19.0 terminalimde aşağıdaki adımları izleyerek çözebildim: -

  1. Ssh anahtarınızı github'a ekleyin, böylece artık 2FA'yı etkinleştirmiş olduğunuz için şifrenizi tekrar kullanmanıza gerek kalmaz. Nasıl kolayca yapılacağını öğrenmek için github sayfasını ziyaret edin .
  2. Anahtar eklendikten sonra, terminalinize gidin ve kaynak URL'yi güncelleyin

    git remote set-url origin git@github.com:<USERNAME>/<BRANCH-NAME>

Bu kadar. Umarım yardımcı olur

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.