Git hatası: Uzak depoya bağlanırken “Ana Bilgisayar Anahtarı Doğrulaması Başarısız”


222

Web sunucumda bulunan uzak bir Git deposuna bağlanmaya ve makineme klonlamaya çalışıyorum.

Komutum için aşağıdaki biçimi kullanıyorum:

git clone ssh://username@domain.com/repository.git

Bu, ekip üyelerimin çoğu için iyi çalıştı. Genellikle bu komutu çalıştırdıktan sonra Git, kullanıcının parolasını sorar ve sonra klonlamayı çalıştırır. Ancak, makinelerimden birinde çalışırken aşağıdaki hatayı alıyorum:

Ana makine anahtarı doğrulaması başarısız oldu.

ölümcül: Uzak depodan okunamadı.

Bu depoya bağlanmak için SSH anahtarları kullanmıyoruz, bu yüzden Git neden bu makinede bir tane kontrol ettiğinden emin değilim.


2
Sen edilmektedir Bu depo bağlanmak için SSH kullanarak, ihbar URL ile başlar nasılssh://
Brandon

Bir var benzer bir sorun . Biri bana yardım edebilir mi lütfen?
Sıkıştım

Yanıtlar:


164

ssh://Klon URL'nizdeki önekle belirtildiği gibi SSH protokolü üzerinden bağlanıyorsunuz . SSH kullanarak her ana makinenin bir anahtarı vardır. İstemciler belirli bir adresle ilişkilendirilmiş ana bilgisayar anahtarını hatırlar ve bir ana bilgisayar anahtarı değiştiğinde bağlantı kurmayı reddeder. Bu orta saldırılardaki adamı önler.

Domain.com için ana bilgisayar anahtarı değişti. Bu sizin için şaşırtıcı görünmüyorsa , ${HOME}/.ssh/known_hostsdomain.com satırını kaldırmak için düzenleyerek veya bir SSH yardımcı programının sizin için yapmasına izin vererek eski anahtarı yerel önbelleğinizden kaldırın.

ssh-keygen -R domain.com

Buradan, güncellenmiş anahtarı kendiniz yaparak kaydedin

ssh-keyscan -t rsa domain.com >> ~/.ssh/known_hosts

veya buna eşdeğer let sshsizin için bağlantı dahaki sefere bunu git fetch, git pullya git push(hatta düz ol' ssh domain.comevet istendiğinde cevaplayarak)

'Domain.com (abcd)' ana bilgisayarının orijinali oluşturulamıyor.
RSA anahtar parmak izi XX: XX: ...: XX'dir.
Bağlanmaya devam etmek istediğinizden emin misiniz (evet / hayır)?

Bu istemin nedeni domain.com'un artık known_hostssildikten sonra ve muhtemelen sistemde olmamasıdır /etc/ssh/ssh_known_hosts, bu nedenle sshbağlantının diğer ucundaki ana bilgisayarın gerçekten domain.com olup olmadığını bilmenin bir yolu yoktur. (Yanlış anahtar varsa, /etcyönetici ayrıcalıklarına sahip birisinin sistem genelindeki dosyayı güncellemesi gerekir.)

Kullanıcıların da anahtarlarla kimlik doğrulaması yapmasını önemle tavsiye ederim. Bu şekilde, ssh-agentanahtar materyali kolaylık sağlamak için saklayabilir (sunucuya her bağlantı için şifresini girmek zorunda kalmak yerine) ve şifreler ağ üzerinden geçmez.


3
Eğlenceli gerçek, çalışan sudo ssh-keygen -R domain.commevcut known_hostsdosyanızı yeniden adlandırabilir known_hosts.oldve sadece kök tarafından okunabilir bir kopya oluşturabilir . ( -rw------- root root) Bunu chownuygun kullanıcıya kolayca geri döndürebilirsiniz, ancak git neden kırıldığı öğleden sonra hata ayıklama da harcayabilirsiniz. : D
Andrew Rueckert

1
Are you sure you want to continue connecting (yes/no)?. Benimle aynı hatayı yapma. Yazmanız gerekiyor yes. Enter tuşuna basmak varsayılan olarak
evet'i seçmez

306

Daha önce Cloning git repo'da yanıtladığım gibi hatalar oluşuyor - Ana bilgisayar anahtarı doğrulaması başarısız oldu. ölümcül: Uzak uç beklenmedik bir şekilde kapatıldı, GitHub'ı yetkili ana makineler listesine ekleyin:

ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts


3
Bu en güvenli yol, zaten anahtar mevcut değil. Bu, sunucuya her bağlandığınızda değil, yalnızca bir kez çalıştırdığınız varsayılır.
Zenexer

Şirketimin özel uyum deposu ecdsa'yı anahtar olarak kullanıyor, bu yüzden çözüm çalışmıyorsa, belki de algoritma doğru olmadığı için
Fendy

8
Bu kabul edilen cevap olmalı. Günümü kurtardığın için teşekkürler.
Keyur

benim için de çalıştı, neden kendi repo klonlayamadık merak ediyordum
StackAttack

Birisi bu gönderiyi işaretledi (yanlış). Yorumdan .
Wai Ha Lee

55

Benzer bir sorun vardı, ancak SSH anahtarları kullanıyordum. Tupy'nin cevabından, yukarıda, sorunun bilinen ana bilgisayarlar listesinde bulunmadığını veya github.com'un bilinen ana bilgisayarlar listesinde bulunmadığını anladım. İşte çözmek için izlediğim adımlar -

  1. mkdir -p ~/.ssh
  2. ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
  3. ssh-keygen -t rsa -C "user.email"
  4. ortak anahtarı bu komutla açın $ cat ~/.ssh/id_rsa.pubve kopyalayın.
  5. Ekle id_rsa.pub sizin GitHub profilinizde SSH tuşları listesine anahtarı.

1
@OJFord FYI: Orijinal cevabı, yorumunuzu geçersiz kılacak şekilde düzenledim. TBH ve tüm saygıyla, ilk etapta tamamen doğru değildi. touchKomut durumda başarısız olur ~/.sshadım 1 hala gerekli bu yüzden, yok dizinde. Ayrıca yeniden yönlendirmeyi touchkullanmadan önce dosyaya ihtiyacınız yoktur >>. Gerekirse oluşturulur (ancak tüm dosya değil, sadece dosyadır, bu yüzden yine mkdir -pde gereklidir). -pSeçenek yapmak o dizin zaten var durumda çalışırlar.
Tad Lispy

1
ssh-keyscanYeni bir ssh anahtarı ekleme konusunda Github belgelerinde eksik olan # 2 .
Phil Andrews

1
Dockerfileİzin eksikliğim ile ilgili sorunlar yaşıyordum. Buraya 2. adımı eklemek sorunu çözdü! Harika çalışmalarınız için teşekkür ederiz
Spencer Pollock

37

Bunun nedeni, github'un şu anda bilinen ana bilgisayarlarınızda olmamasıdır.

Bilinen ana bilgisayarlarınıza github eklemeniz istenir. Bu gerçekleşmediyse, ssh -T git@github.comistemi tekrar almak için çalıştırabilirsiniz .


2
Asla sorulmazsanız doğru cevap budur.
Matthias Hagemann

15

Benim için sadece "evet" yazmam gerekiyordu, "Bağlantıya devam etmek istediğinizden emin misiniz? (Evet / hayır)?" Enter tuşuna basmak yerine.


Bu cevap beni 'evet' yazmak ve
bitbucket sunucumu bilinen_hosts

1
@Sashah Tek ihtiyacınız olan bilinen_hosts'daki bitbucket sunucusuysa, dosyayı manuel olarak düzenleyebilirsiniz. Bunu yapmanın tek nedeni bu ise repoyu klonlamaya gerek yok.
Code-Apprentice

7

Aynı sorunu yeni yüklenen bir sistemde aldım, ama bu bir udev problemiydi. /dev/ttyDüğüm yoktu , bu yüzden yapmak zorundaydım:

mknod -m 666 /dev/tty c 5 0

1
Benim için çalıştı çünkü / dev / tty bir dosya olarak yaratıldı, çok garip! (bu yüzden kaldırmak ve sonra mknod ile yeniden oluşturmanız gerekir)
Kıyamet

@ Geoffroy, / dev / tty'yi kaldırdım ve şimdi sudo yaptığımda şu hatayla karşılaşıyorum: sudo: üzgünüm, sudo'yu çalıştırmak için bir tty'niz olmalı
Milad

@ xe4me Asla gerekli olan sisteme bağlı olarak, kaldırmanız gerektiğini söylemedim. Yeniden başlatma düzeltmelidir.
Geoffroy

@Geoffroy, aslında ilk yorumcu, kaldırmam ve yeniden yaratmam gerektiğini söyledi: d Hayır, yeniden başlatma işe yaramadı, kökü söylemek zorunda kaldım, düzeltti: d
Milad

6

Her zaman güvenlik duvarları tarafından korunan ofis intranetindeyseniz (aksi takdirde tehlikeli) ~ / .ssh / config dosyasında aşağıdaki satırlara sahip olmanız yeterlidir.

Ana Bilgisayar *
StrictHostKeyChecking no
UserKnownHostsFile = / dev / null


2
Kurumsal güvenlik duvarlarımız olmadan bu hala tehlikelidir. Sunucu anahtarını doğrulamadan gerçek github ile konuştuğunuzu nasıl anlarsınız?
2018

1
Kurumsal ortamlarda yerel git depoları çoğunlukla kullanılır, asla açık kaynak kodlu değildir. Dosyanın üst kısmındaki en kötü durum .ssh config, ssh için daha spesifik eşleşmeler seçmek üzere github açık ana bilgisayarla ilgili yapılandırma satırlarına sahip olabilir.
sunil

5

Benim için işe yarayan ilk önce yeni bilgisayarın SSH anahtarımı eklemekti, bu talimatları GitLab - SSH anahtarını ekledim . Win10'da olduğumdan beri, Windows'ta Git Bash'te tüm bu komutları yapmak zorunda olduğumu unutmayın (normal DOS cmd Kabuğunda çalışmadı).

Sonra yine Git Bash'de git clonesorun yaşadığım bir repo yapmak zorunda kaldım ve benim durumumda zaten yerel olarak sahip olduğum ve taahhütlerimi kaybetmek istemediğim için farklı bir isme klonlamak zorunda kaldım. Örneğin

git clone ssh://git@gitServerUrl/myRepo.git myRepo2

Sonra bilinen ana bilgisayarlar listesine eklemek istemi var, soru bu olabilir:

Bağlanmaya devam etmek istediğinizden emin misiniz (evet / hayır)?

"Evet" yazdım ve sonunda işe yaradı, tipik olarak buna benzer bir mesaj almalısınız:

Uyarı: Bilinen ana makineler listesine '[repo bağlantınız]' (ECDSA) kalıcı olarak eklendi.

Not : Windows'taysanız, tüm komutlar için Git Bash kullandığınızdan emin olun, bu normal cmd kabuğunda veya powershell'de çalışmadı, bunu Git Bash'te gerçekten yapmak zorundaydım.

Son olarak, ikinci klon deposunu sildim ( myRepo2örnekte) ve ilk repoma geri döndüm ve nihayet en sevdiğim editör VSCode'da normal gibi tüm Git şeylerini yapabilirdim.


Gerçekten, Cygwin istemim neredeyse git bash istemime benziyor, ancak sadece git bash isteminde çalışıyor!
Josiah Yoder

3

Windows için git kullanıyorsanız.

  • Git GUI'sini açın.
  • Git GUI'de yerel git deposunu açın.
  • Uzaktan kumandayı ekleyin veya uzaktan kumanda zaten varsa itin.
  • Devam etmek isteyip istemediğiniz sorusuna "evet" yanıtı verin.

GUI istemcisi sizin için anahtarı ekler ~/.ssh/known_hosts. Bunu sık sık yapmazsanız ve git komut satırını kullanma gereğini ortadan kaldırırsanız (hatırı sayılır) daha kolaydır (standart Windows komut satırlarında ssh-keyscanyürütülebilir dosya yoktur.


2

Uzak sunucu özel depoya bağlanmak istediğinde, ssh ile kimlik doğrulaması yapar. Ssh-keygen ile veya zaten ortak-özel anahtarınız varsa özel-ortak anahtar çiftini oluşturun. ortak anahtarı kopyalayıp özel repo ayarlarına yapıştırın.

ÖzelRepo -> Ayarlar -> Dağıtım Anahtarları -> Dağıtım anahtarı ekle -> Genel anahtarı yapıştır.

Artık uzak sunucu özel depoya bağlanabilecektir.

NOT: Konuşlandırma anahtarlarının yalnızca depoyu okumak için erişimi vardır. Yazma erişimine açıkça izin verilmesi gerekiyor.


1

Bu, uzak ana bilgisayar anahtarınızın değiştirildiği anlamına gelir (Ana bilgisayar parolası değişikliği olabilir),

Terminaliniz bu komutu kök kullanıcı olarak yürütmeyi önerdi

$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]

Bu ana bilgisayar adını pc / sunucunuzdaki ana bilgisayar listesinden kaldırmanız gerekir. Önerilen komutu kopyalayın ve kök kullanıcı olarak çalıştırın.

$ sudo su                                                        // Login as a root user

$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]    // Terminal suggested command execute here
Host [www.website.net]:4231 found: line 16 type ECDSA
/root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old

$ exit                                                           // Exist from root user

Tekrar Deneyin, Umarım bu işe yarar.


Not: kabuğunuza bağlı olarak, \ [ve \] köşeli parantezlerinden kaçmanız veya tırnak işareti kullanmanız gerekebilir.
Phlarx

1

Sorulduğu zaman:

Are you sure you want to continue connecting (yes/no)?

Tip evet yanıtı olarak

Sorunumu bu şekilde çözdüm. Ama sadece enter düğmesine basmaya çalışırsanız, işe yaramaz!


0

"Git url" kodunuzu "https" URL biçiminde Jenkins dosyasında veya istediğiniz yerde kullanabilirsiniz.

git url: 'https://github.com/jglick/simple-maven-project-with-tests.git'


0

Görüntü açıkken derleme süresi boyunca DockerFile içinde aynı hatayla karşı karşıyaydım. Dockerfile'da çok az değişiklik yaptım.

 RUN git clone  https://github.com/kacole2/express-node-mongo-skeleton.git /www/nodejs

Bunun nedeni git@github.com: ... sözdiziminin kullanılması> klonlamak için SSH kullanılması ve kabın içinde özel anahtarınızın kullanılabilir olmamasıdır. Bunun yerine RUN git clone> https://github.com/edenhill/librdkafka.git kullanmak isteyeceksiniz .


-1

Benzer bir sorun yaşadım, ne yazık ki GitExtensions HMI kullandım ve bir parola yazdığımı unuttum. HMI ile .... unutun! Anahtarınızı oluştururken parola girmeyin!


-4

Bu mesajı, benim git cloneolmayan bir repoya çalıştığımda aldım . Düzeltme çatal ve sonra klonlamak oldu.

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.