Kesalahan Git: "Verifikasi Kunci Host Gagal" saat menghubungkan ke repositori jarak jauh

221

Saya mencoba untuk terhubung ke repositori Git jarak jauh yang berada di server web saya dan mengkloningnya ke mesin saya.

Saya menggunakan format berikut untuk perintah saya:

git clone ssh://[email protected]/repository.git

Ini bekerja dengan baik untuk sebagian besar anggota tim saya. Biasanya setelah menjalankan perintah ini Git akan meminta kata sandi pengguna, dan kemudian menjalankan kloning. Namun, ketika berjalan di salah satu mesin saya, saya mendapatkan kesalahan berikut:

Verifikasi kunci host gagal.

fatal: Tidak bisa membaca dari repositori jarak jauh.

Kami tidak menggunakan kunci SSH untuk terhubung ke repositori ini, jadi saya tidak yakin mengapa Git memeriksa satu di mesin khusus ini.

bootsz
sumber
1
Anda sedang menggunakan SSH untuk koneksi ke repositori ini, melihat bagaimana URL Anda dimulai denganssh://
Brandon
Saya punya masalah serupa . Adakah yang bisa membantu saya? Saya macet :(
SepSol

Jawaban:

164

Anda terhubung melalui protokol SSH, seperti yang ditunjukkan oleh ssh://awalan pada URL klon Anda. Menggunakan SSH, setiap host memiliki kunci. Klien mengingat kunci host yang terkait dengan alamat tertentu dan menolak untuk terhubung jika kunci host tampak berubah. Ini mencegah pria dalam serangan tengah.

Kunci host untuk domain.com telah berubah. Jika ini tidak mencurigakan bagi Anda , hapus kunci lama dari cache lokal Anda dengan mengedit ${HOME}/.ssh/known_hostsuntuk menghapus baris untuk domain.com atau membiarkan utilitas SSH melakukannya untuk Anda dengan

ssh-keygen -R domain.com

Dari sini, rekam kunci yang diperbarui dengan melakukannya sendiri

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

atau, sama, biarkan sshmelakukannya untuk Anda saat Anda terhubung dengan git fetch, git pullatau git push(atau bahkan ol polos' ssh domain.com) dengan menjawab ya ketika diminta

Keaslian host 'domain.com (abcd)' tidak dapat ditetapkan.
Sidik jari kunci RSA adalah XX: XX: ...: XX.
Anda yakin ingin terus terhubung (ya / tidak)?

Alasan untuk prompt ini adalah domain.com tidak lagi ada di dalam Anda known_hostssetelah menghapusnya dan mungkin tidak ada dalam sistem /etc/ssh/ssh_known_hosts, jadi sshtidak ada cara untuk mengetahui apakah host di ujung koneksi itu benar-benar domain.com. (Jika kunci yang salah ada /etc, seseorang dengan hak administratif harus memperbarui file seluruh sistem.)

Saya sangat menyarankan Anda untuk mempertimbangkan meminta pengguna mengotentikasi dengan kunci. Dengan begitu, ssh-agentdapat menyimpan materi utama untuk kenyamanan (daripada setiap orang harus memasukkan kata sandi untuk setiap koneksi ke server), dan kata sandi tidak melalui jaringan.

Greg Bacon
sumber
3
Kenyataan yang menyenangkan, menjalankan sudo ssh-keygen -R domain.comdapat mengubah nama known_hostsfile yang ada menjadi known_hosts.old, dan membuat salinan yang hanya dapat dibaca oleh root . ( -rw------- root root) Anda dapat dengan mudah chownmengembalikan ini ke pengguna yang sesuai, tetapi Anda juga mungkin membuang-buang waktu debugging mengapa git rusak. : D
Andrew Rueckert
1
Are you sure you want to continue connecting (yes/no)?. Jangan membuat kesalahan yang sama dengan saya. Anda perlu mengetik yes. Cukup menekan enter tidak memilih ya secara default
JolonB
305

Seperti yang saya jawab sebelumnya di Kloning git repo menyebabkan kesalahan - Verifikasi kunci host gagal. fatal: Ujung jarak jauh menutup secara tak terduga , tambahkan GitHub ke daftar host resmi:

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

Tupy
sumber
3
Ini adalah cara yang paling aman, singkat dari sudah memiliki kunci. Itu dengan asumsi Anda hanya menjalankannya sekali, tidak setiap kali Anda terhubung ke server.
Zenexer
Repositori private fit perusahaan saya menggunakan ecdsa sebagai kunci, jadi jika solusinya tidak berfungsi, mungkin karena algoritmenya tidak benar
Fendy
8
Ini harus menjadi jawaban yang diterima. Terima kasih telah menyelamatkan hari saya.
Keyur
bekerja untuk saya juga, saya bertanya-tanya mengapa saya tidak bisa mengkloning repo saya sendiri
StackAttack
Seseorang telah menandai pos ini (salah). Dari Ulasan .
Wai Ha Lee
55

Saya memiliki masalah serupa, tetapi menggunakan kunci SSH. Dari jawaban Tupy, di atas, saya menemukan bahwa masalahnya ada pada file known_hosts yang tidak ada atau github.com tidak ada dalam daftar host yang dikenal. Berikut langkah-langkah yang saya ikuti untuk menyelesaikannya -

  1. mkdir -p ~/.ssh
  2. ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
  3. ssh-keygen -t rsa -C "user.email"
  4. buka kunci publik dengan perintah ini $ cat ~/.ssh/id_rsa.pubdan salin.
  5. Tambahkan kunci id_rsa.pub ke daftar kunci SSH di profil GitHub Anda.
Saran
sumber
1
@OJFord FYI: Saya telah mengedit jawaban asli dengan cara yang membuat komentar Anda usang. TBH dan dengan segala hormat itu tidak sepenuhnya benar sejak awal. The touchperintah akan gagal dalam hal ~/.sshdirektori tidak ada, jadi langkah 1 masih diperlukan. Anda juga tidak perlu touchfile sebelum menggunakan >>redirection. Ini akan dibuat jika perlu (tetapi hanya file, bukan seluruh jalur, jadi masih mkdir -pdiperlukan). The -ppilihan make bekerja dalam kasus direktori sudah ada.
Tad Lispy
1
# 2 ssh-keyscanyang hilang dari dokumen Github tentang menambahkan kunci ssh baru.
Phil Andrews
1
Saya mengalami masalah dengan Dockerfilekurangnya izin. Menambahkan langkah ke-2 di sini memperbaiki masalah itu! Terima kasih atas kerja
bagusnya
37

Ini terjadi karena github saat ini tidak ada di host yang dikenal.

Anda akan diminta untuk menambahkan github ke host yang dikenal. Jika ini belum terjadi, Anda dapat lari ssh -T [email protected]untuk menerima konfirmasi lagi.

Powderham
sumber
2
Ini adalah jawaban yang tepat jika Anda tidak pernah diminta.
Matthias Hagemann
15

Bagi saya, saya hanya perlu mengetikkan "ya" pada prompt yang menanyakan "Apakah Anda yakin ingin terus terhubung (ya / tidak)?" daripada hanya menekan Enter.

Magang-Kode
sumber
Jawaban ini membuat saya sadar bahwa saya harus mengkloning repo saya secara manual di server build saya untuk mengetikkan 'ya' dan menambahkan server
bitbucket
1
@Sashah Jika semua yang Anda butuhkan adalah server bitbucket di known_hosts, Anda dapat mengedit file secara manual. Tidak perlu mengkloning repo jika ini adalah satu-satunya alasan untuk melakukannya.
Code-Apprentice
7

Saya mendapat masalah yang sama pada sistem yang baru diinstal, tetapi ini adalah masalah udev. Tidak ada /dev/ttysimpul, jadi saya harus melakukan:

mknod -m 666 /dev/tty c 5 0
Geoffroy
sumber
1
Ini bekerja untuk saya karena / dev / tty dibuat sebagai file, sangat aneh! (jadi Anda harus menghapusnya kemudian membuatnya kembali dengan mknod)
Doomsday
@ Geoffroy, saya menghapus / dev / tty dan sekarang ketika melakukan sudo, saya menghadapi kesalahan ini: sudo: maaf, Anda harus memiliki tty untuk menjalankan sudo
Milad
@ xe4me Saya tidak pernah mengatakan Anda harus menghapusnya, tergantung pada sistem yang sebenarnya diperlukan. Reboot harus memperbaikinya.
Geoffroy
@ Geoffroy, sebenarnya komentator pertama, mengatakan saya harus menghapus dan membuat ulang: d Tidak, reboot tidak berhasil, saya harus memberi tahu root, dia memperbaikinya: d
Milad
6

Jika Anda berada di intranet kantor (jika tidak berbahaya) yang selalu dilindungi oleh firewall cukup ikuti baris berikut di ~ / .ssh / config Anda

Host *
StrictHostKeyChecking no
UserKnownHostsFile = / dev / null

sunil
sumber
2
Ini masih berbahaya, dengan firewall tanpa perusahaan kami. Bagaimana Anda tahu Anda sedang berbicara dengan github asli tanpa memverifikasi kunci server?
Mnebuerquo
1
Dalam lingkungan perusahaan, repositori lokal git kebanyakan digunakan, tidak pernah open source. Kasus terburuk .ssh config di bagian atas file dapat memiliki github host config lines terkait eksplisit untuk ssh untuk memilih kecocokan yang lebih spesifik.
sunil
5

Apa yang berhasil bagi saya adalah pertama-tama menambahkan kunci SSH saya dari komputer baru, saya mengikuti instruksi ini dari GitLab - tambahkan kunci SSH . Perhatikan bahwa karena saya menggunakan Win10, saya harus melakukan semua perintah ini di Git Bash pada Windows (itu tidak berfungsi di DOS cmd Shell biasa).

Kemudian lagi di Git Bash, saya harus melakukan git clonerepo yang saya punya masalah, dan dalam kasus saya saya harus mengkloningnya ke nama yang berbeda karena saya sudah memilikinya secara lokal dan tidak ingin kehilangan komitmen saya. Sebagai contoh

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

Lalu saya mendapat prompt untuk menambahkannya ke daftar host yang dikenal, pertanyaannya mungkin yang ini:

Anda yakin ingin terus terhubung (ya / tidak)?

Saya mengetik "ya" dan akhirnya berhasil, Anda biasanya harus mendapatkan pesan yang mirip dengan ini:

Peringatan: ditambahkan secara permanen '[tautan repo Anda]' (ECDSA) ke daftar host yang dikenal.

Catatan : jika Anda menggunakan Windows, pastikan Anda menggunakan Git Bash untuk semua perintah, ini tidak berfungsi dalam cmd shell atau PowerShell biasa, saya benar-benar harus melakukan ini di Git Bash.

Terakhir saya menghapus repo klon kedua ( myRepo2dalam contoh) dan kembali ke repo pertama saya dan akhirnya saya bisa melakukan semua hal Git seperti biasa di VSCode editor favorit saya.

ghiscoding
sumber
Memang, prompt Cygwin saya hampir persis sama dengan prompt git bash saya, tetapi hanya berfungsi di prompt git bash!
Josiah Yoder
3

Jika Anda menggunakan git untuk Windows.

  • Buka git GUI.
  • Buka repositori git lokal di git GUI.
  • Tambahkan remote atau tekan jika remote sudah ada.
  • Jawab "ya" untuk pertanyaan tentang apakah Anda ingin melanjutkan.

Klien GUI menambahkan kunci untuk Anda ~/.ssh/known_hosts. Ini lebih mudah diingat jika Anda tidak sering melakukannya dan juga menghindari kebutuhan untuk menggunakan baris perintah git (baris perintah Windows standar tidak memiliki ssh-keyscanexecutable.

Julian Knight
sumber
2

Ketika server jarak jauh ingin terhubung ke repo pribadi, server akan diautentikasi melalui ssh. Buat pasangan kunci publik-publik dengan ssh-keygen atau jika Anda sudah memiliki kunci publik-swasta. salin & tempel kunci publik di Pengaturan repo pribadi.

YourPrivateRepo -> Pengaturan -> Deploy Keys -> Tambahkan kunci penyebaran -> Tempelkan kunci publik.

Sekarang server jarak jauh akan dapat terhubung ke repo pribadi.

CATATAN: Tombol penyebaran hanya memiliki akses untuk membaca repo. Perlu secara eksplisit mengizinkan akses tulis.

Sandy
sumber
1

Ini berarti kunci host jarak jauh Anda diubah (Mungkin perubahan kata sandi host),

Terminal Anda menyarankan untuk menjalankan perintah ini sebagai pengguna root

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

Anda harus menghapus nama host dari daftar host di pc / server Anda. Salin perintah yang disarankan dan jalankan sebagai pengguna root.

$ 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

Coba Lagi, Semoga ini berhasil.

Jay Patel
sumber
Catatan: tergantung pada shell Anda, Anda mungkin harus keluar dari tanda kurung siku \ [dan \] atau menggunakan tanda kutip.
Phlarx
1

Ketika ditanya:

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

Ketikkan ya sebagai respons

Itulah cara saya memecahkan masalah saya. Tetapi jika Anda mencoba untuk hanya menekan tombol enter, itu tidak akan berhasil!

shutsuke
sumber
0

Anda dapat menggunakan "git url" di format URL 'https "di Jenkinsfile atau di mana pun Anda inginkan.

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

Nitin
sumber
0

Saya menghadapi kesalahan yang sama di dalam DockerFile selama waktu pembuatan sementara gambar publik. Saya melakukan sedikit modifikasi di Dockerfile.

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

Ini mungkin karena menggunakan [email protected]: ... sintaks berakhir> menggunakan SSH untuk mengkloning, dan di dalam wadah, kunci pribadi Anda tidak> tersedia. Anda ingin menggunakan RUN git clone> https://github.com/edenhill/librdkafka.git sebagai gantinya.

Adiii
sumber
-1

Saya memiliki masalah yang sama, sayangnya saya menggunakan HMI GitExtensions dan lupa bahwa saya menulis frasa sandi. Dengan HMI .... lupakan saja! Jangan masukkan frasa sandi saat Anda menghasilkan kunci!

Jerome Vacher
sumber
-4

Saya mendapat pesan ini ketika saya mencoba git clonerepo yang bukan milik saya. Cara mengatasinya adalah dengan melakukan fork dan kemudian mengkloning.

fyodrs
sumber