Git mengatakan "Peringatan: Secara permanen ditambahkan ke daftar host yang dikenal"

192

Setiap kali saya menggunakan git untuk berinteraksi dengan remote, seperti ketika menarik atau mendorong, saya diperlihatkan pesan berikut:

Peringatan: Tambahkan '...' (RSA) secara permanen ke daftar host yang dikenal.

Bagaimana saya bisa mencegah pesan yang mengganggu ini tidak muncul? Itu hanya gangguan — semuanya berfungsi dengan baik.

Donald Taylor
sumber
1
Apakah maksud Anda setiap saat? Apakah itu memberi Anda prompt formulir The authenticity of host '...' can't be established. RSA key fingerprint is .... Are you sure you want to continue connecting (yes/no)?, atau apakah Anda menekan itu? Jika ya, apakah sidik jari itu sama setiap kali? Jika tidak, itu benar - benar menakutkan . Pilihan yang kurang menakutkan adalah bahwa entah bagaimana sebenarnya tidak mengatur untuk menulis ke file host, jadi itu mencoba lagi setiap waktu. Silahkan lihat ~/.ssh/known_hosts?
Cascabel
1
Iya. <i> Setiap </i> kali. Namun, saya tidak melihat pesan "Apakah Anda yakin ..." - mungkin saya telah menekannya.
Donald Taylor
Apakah tuan rumah terdaftar ~/.ssh/known_hosts? (Apakah terdaftar 5.000 kali?) Apakah ~/.ssh/configada / mengandung sesuatu (terutama nilai untuk StrictHostKeyChecking)?
Cascabel
Tuan rumah terdaftar dalam file itu sekali, dan itu adalah satu-satunya entri.
Donald Taylor
2
Saya menduga konten known_hostsfile Anda buruk. Itu harus menjadi kunci host, pada satu baris yang sangat panjang. Jika Anda hanya memiliki nama host di sana (misalnya) itu tidak akan berfungsi. Saya sarankan Anda menghapus file ini (jika memang hanya berisi informasi untuk host tunggal ini) dan memungkinkan SSH untuk membuatnya lain kali Anda terhubung. Seharusnya diam setelah itu.
tripleee

Jawaban:

240

Solusi: buat ~/.ssh/configfile dan masukkan baris:

UserKnownHostsFile ~/.ssh/known_hosts

Anda kemudian akan melihat pesan tersebut saat berikutnya Anda mengakses Github, tetapi setelah itu Anda tidak akan melihatnya lagi karena host ditambahkan ke known_hostsfile. Ini memperbaiki masalah, bukan hanya menyembunyikan pesan log.

Masalah ini mengganggu saya selama beberapa waktu. Masalah terjadi karena klien OpenSSH yang dikompilasi untuk Windows tidak memeriksa file known_hosts di~/.ssh/known_hosts

ssh -vvvvvvvvvvvvvvvvvvv [email protected]

debug3: check_host_in_hostfile: filename /dev/null
debug3: check_host_in_hostfile: filename /etc/ssh/ssh_known_hosts
debug3: check_host_in_hostfile: filename /dev/null
debug3: check_host_in_hostfile: filename /etc/ssh/ssh_known_hosts
Warning: Permanently added 'github.com,207.97.227.239' (RSA) to the list of known hosts.
Jeremiah Gowdy
sumber
9
Ya, saya tidak menganggap menekan peringatan atau kesalahan sebagai solusi yang tepat untuk suatu masalah. ;)
Jeremiah Gowdy
1
Baru-baru ini, saya menghadapi masalah yang sama pada mesin ubuntu saya. Itu mulai berperilaku seperti ini setelah saya menggunakan kunci berbeda (dari default saya ~/.ssh/id_rsa) untuk terhubung ke server. Seperti @JeremiahGowdy sebutkan, saya punya debug3: load_hostkeys: loading entries for host "172.16.3.101" from file "/dev/null". Mengapa SSH mulai menggunakan /dev/nullsebagai known_hosts setelah saya mengubah kunci?
m-ric
6
Bagus sekali! Akhirnya peringatan bodoh itu berhenti. Btw di Windows, ~in ~/.ssh/configadalah folder home pengguna. Untuk membukanya dengan mudah, Tekan Win-R , ketik cmd Enter . Command prompt seharusnya sudah terbuka di folder rumah Anda. Ketik cd .ssh Enter , lalu start . Enter untuk membuka folder di Windows Explorer. Kemudian Anda dapat membuat file konfigurasi di Notepad (tidak ada ekstensi .txt saat menyimpan). (Pengguna pro dapat gema langsung ke file baru di command prompt itu sendiri ;)). Jalankan perintah git yang melibatkan remote dua kali (seperti git fetch), dan Anda selesai.
ADTC
1
mengapa Anda memiliki 20 v untuk ssh?
bubakazouba
3
@bubakazouba Semakin banyak v, semakin banyak verbose yang didapat, periksa dokumen untuk itu. Tiga sudah cukup, dua puluh adalah jumlah berlebihan: D
Petr Mánek
90

Tambahkan baris berikut ke file konfigurasi ssh Anda ($ HOME / .ssh / config):

LogLevel=quiet

Jika menjalankan ssh dari baris perintah tambahkan opsi berikut ke string perintah:

-o LogLevel=quiet

Misalnya, yang berikut ini mencetak versi gcc yang diinstal pada machine.example.org (dan tidak ada peringatan):

ssh -o UserKnownHostsFile=/dev/null \
    -o StrictHostKeyChecking=no \
    -o LogLevel=quiet \
    -i identity_file \
    machine.example.org \
    gcc -dumpversion
Kyle Kloepper
sumber
1
Menambahkan "LogLevel = quiet" ke file "config" berfungsi. Terima kasih.
Donald Taylor
3
Untuk menjaga keamanan, alangkah baiknya untuk meletakkan "LogLevel = quiet" di dalam bagian "Host".
Joe
39
LogLevel=quietadalah ide yang buruk, dia ingin semua kesalahan ditampilkan, dia hanya ingin menghindari kesalahan yang menjengkelkan ini. Mungkin karena dia menipu ssh untuk digunakan /dev/nullsebagai known_hostsfile, mungkin karena dia ingin mematikan known_hostspemeriksaan sidik jari, tetapi tidak bisa, karena ssh tuan tidak mengizinkannya.
Elazar Leibovich
@bukzor loglevel=errormasih menampilkan "Sambungan ke <server> ditutup" saat koneksi diputus, yang juga sangat menjengkelkan untuk skrip.
Guss
Saya menurunkan ini karena tidak benar-benar menyelesaikan masalah. Itu hanya menyembunyikannya.
alaboudi
60

Setel LogLevelke ERROR(bukan QUIET) dalam ~/.ssh/configfile untuk menghindari kesalahan ini:

Host *
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR
pengguna1193229
sumber
2
Ini bekerja paling baik dalam kasus saya - atau Anda dapat menentukan "-oLogLevel = ERROR" pada baris perintah
Brad
5

Pesan itu dari SSH, yang memperingatkan Anda bahwa Anda terhubung ke host yang belum pernah Anda hubungkan sebelumnya. Saya tidak akan merekomendasikan untuk mematikannya, karena itu berarti Anda mungkin kehilangan peringatan tentang perubahan kunci host, yang dapat menunjukkan serangan MITM pada sesi SSH Anda.

Jason Carreiro
sumber
1
Tapi saya terhubung dengannya 10-15 kali setiap hari, dan saya masih menerima peringatan ini.
Donald Taylor
@ JackB. Lihatlah ~/.ssh/known_hostsdan lihat apakah tuan rumah Anda ada di sana.
Borealid
Apakah kuncinya berubah karena alasan tertentu? Periksa sidik jari dalam file vs sidik jari yang dikeluarkan oleh ssh. Juga, apakah mode direktori .ssh Anda disetel ke 0700?
Jason Carreiro
2
@JasonCarreiro, saya anak besar, saya tahu tidak ada yang akan menarik serangan MITM ke dalam rak saya, keamanan merupakan tradeoff, dan saya ingin komputer baru bekerja di luar kotak dengan kunci preshared, tanpa perlu mengelola CA atau ssh-keyscan.
Elazar Leibovich
4

Untuk menekan pesan peringatan, sshAnda dapat menambahkan baris berikut ke ~/.ssh/config:

Host *
LogLevel error

Itu akan menonaktifkan peringatan tetapi bukan pesan kesalahan. Seperti pengaturan lain di ~/.ssh/configAnda dapat mengonfigurasi LogLevelper-host jika Anda menginginkan kontrol yang lebih terdegradasi.

Stefan Schmidt
sumber
2

Ini terutama berarti ada perubahan untuk kunci untuk host itu ~/.ssh/known_hosts , dan itu tidak akan secara otomatis memperbaruinya. Karenanya setiap kali Anda mendapatkan pesan peringatan ini.

Ini sering terjadi untuk menghubungkan ke mesin virtual yang dibuat ulang, yang mengubah kunci dengan alamat IP yang sama

Larutan

Jika Anda hanya memiliki satu entri, maka Anda dapat menghapus ~/.ssh/known_hosts file, dan setelah koneksi pertama, bahwa kunci akan ada di sana, dan tidak ada pesan peringatan setelah itu.

Jika Anda memiliki banyak entri, maka Anda dapat menggunakan perintah di bawah ini untuk menghapus

$ ssh-keygen -R <hostname>

Ini bekerja dengan baik untuk saya

Larry Cai
sumber
0

Jika Anda menggunakan repositori dari GitHub, pertimbangkan untuk menggunakan versi HTTPS dari URL, untuk menghindari masalah ini sepenuhnya:

Klik tombol HTTP dan gandakan URL itu

Jika Anda mengkloning repositori Anda dari dalam aplikasi Windows GitHub, inilah yang digunakannya untuk URL jarak jauh. Mungkin mereka tahu sesuatu yang kita tidak tahu.

Ricket
sumber
Catatan: Jika Anda menggunakan otentikasi kunci pribadi, Anda tidak dapat menggunakan HTTP (S).
qwertzguy
0

Saya memiliki pertanyaan yang sama, dan saya menemukan tidak ada .sshfile di file saya ~. Jadi saya hanya membuat .sshdirektori di bawah ~jalur, dan masalah ini terpecahkan.

Kris Roofe
sumber
0

Tambahkan kunci ssh

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

eval "$(ssh-agent -s)"

ssh-add ~/.ssh/bitbucket_rsa

file konfigurasi peti

crate ~/.ssh/config

tambahkan di bawah garis.

UserKnownHostsFile ~/.ssh/known_hosts

Kemudian tambahkan kunci pub dan tiru repositori Anda ... Selesai .....

Thanuja
sumber
0

Saya telah menghadapi kesalahan yang sama di Linux / Cent OS VM dan itu karena IP berubah setelah restart. Untuk mengatasi masalah ini, saya mendefinisikan IP statis di jaringan dan menambahkan entri itu ke file / etc / hosts. Untuk IP statis, sebutkan nilai rentang yang sedikit lebih tinggi. Misalnya jika IP Anda saat ini (ipconfig / ifconfig) adalah 192.168.0.102, kali berikutnya setelah restart ini mungkin menjadi 192.168.0.103. Jadi, tentukan IP statis Anda di pengaturan IPV4 sebagai 192.168.0.181 yang seharusnya bisa digunakan.

Vignesh Menon
sumber
coba sorot kata kunci dan jelas dengan format itu akan membantu menjangkau jawaban Anda untuk orang lain
Agilanbu
0

Dalam kasus saya, itu karena admin yang mengatur server mengatur opsi ini ~/.ssh/config

StrictHostKeyChecking no
UserKnownHostsFile /dev/null

Yang bekerja dengan baik untuk sebagian besar kasus dengan tidak menggunakan ~/.ssh/known_hostsfile. Tetapi untuk repo gitlab perusahaan, setiap kali diberikan "Peringatan: Secara permanen ditambahkan ... ke daftar host yang dikenal."

Solusi saya adalah mengomentari UserKnownHostsFile /dev/nullbaris, yang memungkinkan pembuatan ~/.ssh/known_hosts. Maka itu tidak memberikan peringatan lagi setelah itu.

Anda mungkin juga memiliki entri lama / tidak valid di known_hosts.

# find entry in ~/.ssh/known_hosts
ssh-keygen -F <hostname>

# delete entry in ~/.ssh/known_hosts
ssh-keygen -R <hostname>
wisbucky
sumber
-1

Saya mengambil solusi saya karena terus downvotes.
Itu adalah solusi terbaik tanpa benar-benar meretas kode sumber klien SSH itu sendiri.
Jika seseorang tertarik, periksa riwayat sunting.

John
sumber