Identifikasi host jarak jauh ssh telah berubah


619

Saya telah menginstal ulang server saya dan saya menerima pesan-pesan ini:

[user@hostname ~]$ ssh root@pong
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
6e:45:f9:a8:af:38:3d:a1:a5:c7:76:1d:02:f8:77:00.
Please contact your system administrator.
Add correct host key in /home/hostname /.ssh/known_hosts to get rid of this message.
Offending RSA key in /var/lib/sss/pubconf/known_hosts:4
RSA host key for pong has changed and you have requested strict checking.
Host key verification failed.

Saya telah mencoba berbagai solusi yang saya temukan di Internet. known_hostsFile saya (biasanya dalam ~/.ssh/known_hosts) ada di /var/lib/sss/pubconf/known_hosts. Saya sudah mencoba mengeditnya, tetapi tetap dalam satu keadaan. Saya telah menginstal ipa-client dan memiliki Fedora 19. Bagaimana cara mengatasi peringatan ini?

Semua jawaban yang dijawab sejauh ini hanya berfungsi jika Anda tidak menginstal Freeipa.

Jawaban yang tepat untuk freeipa dalam komentar di bawah dari adrin ada di sini .


1
baru saja menemukan cara yang sulit bahwa masalah ini juga dapat terjadi jika Anda memiliki konflik alamat ip nslookup ip Anda untuk men-debug masalah ini lebih lanjut
sharrajesh

1
Ada jalan buntu di sini. Yang ini ditandai duplikat sehingga tidak ada yang dapat menambahkan jawaban dan yang ditautkannya ditandai oleh topik sehingga tidak ada yang dapat menambahkan jawaban di sana. Jika Anda menghapus host dikenal, itu akan memperbaiki masalah juga.
zar

1
Saya memiliki masalah yang sama. Demi saya dan orang lain, inilah pertanyaan dan jawaban saya untuk itu: superuser.com/questions/1071204/…
adrin

3
Sebagai seseorang yang ingin memverifikasi kunci mereka terlebih dahulu saya menemukan jawaban ini bermanfaat. askubuntu.com/a/83499/620623
Declan McKenna

Seperti yang disebutkan sharrajesh: periksa entri DNS Anda (di FreeIPA untuk saya) dan lihat Anda tidak memiliki banyak entri A dengan IP yang tidak dapat dijangkau dari jaringan.
th3penguinwhisperer

Jawaban:


1071

Inilah solusi paling sederhana

ssh-keygen -R <host>

Sebagai contoh,

ssh-keygen -R 192.168.3.10

Dari ssh-keygenhalaman manual :

  • -R hostnameMenghapus semua kunci milik nama host dari file diketahui_hosts. Opsi ini berguna untuk menghapus host hash (lihat opsi -H di atas).

Saya menggunakan Windows dan solusi ini, juga tidak menghapus kunci, berfungsi, apa lagi yang bisa saya coba?
jaycode

5
Baiklah, ternyata pada Windows saya harus menggunakan terminal dari git bash untuk ini (atau terminal MingW32). Rumit.
jaycode

25
perlu diingat bahwa jika Anda terhubung melalui port tertentu, Anda mungkin harus menghapus dengan sintaks seperti ssh-keygen -R [127.0.0.1]:3022. Cukup periksa file .ssh / known_hosts Anda untuk mengetahui apa yang dikatakannya secara eksplisit.
Adam Johns

4
Ketika saya mencoba ini saya mendapatkan kesalahan "<hostname> tidak ditemukan di ~ / .ssh / known_hosts"
Nodeocrat

3
Mengapa peringatan ini terjadi?
Vilas Joshi

199

Menggunakan

ssh-keygen -R [hostname]

Contoh dengan alamat ip / nama host adalah:

ssh-keygen -R 168.9.9.2

Ini akan memperbarui kesalahan host Anda dari the known_hosts. Anda juga dapat memberikan path dari diketahui_hosts dengan flag -f.


1
Menghapus kunci yang sesuai $ ssh-keygen -R {server.name.com}| $ ssh-keygen -R {ssh.server.ip.address}| $ ssh-keygen -R server.example.com
DaddyMoe

5
Bagaimana jawaban tanpa penjelasan mendapatkan banyak gangguan .. tidak ada masalah keamanan, tidak ada penjelasan .... -1
Daniel W.

4
Tampaknya juga seperti salinan dari jawaban lain di bawah ini. Tolong mod bersihkan kekacauan ini ...
Daniel W.

115

Saya memiliki kesalahan yang sama ini terjadi setelah saya membuat ulang gambar Digital Ocean Ubuntu. Saya menggunakan perintah berikut dengan IP server saya di tempat[IP_ADDRESS]

ssh-keygen -R [IP_ADDRESS]

Terima kasih banyak! Saya menggunakan nama host dan hanya bekerja dengan IP_ADDRESS :)
J. Lopes

1
Ini melakukannya untuk saya dan harus menjadi jawaban yang diterima. Saya tidak tahu mengapa ada dua salinan jawaban ini yang datang kemudian dan keduanya memiliki lebih banyak suara.
Wylliam Judd

Milikmu bukan kesalahan yang sama; server Anda tidak menjalankan SSSD. Lihat OP.
Mercury00

39

Ketika Anda menginstal ulang server, identitasnya berubah, dan Anda akan mulai mendapatkan pesan ini. Ssh tidak memiliki cara untuk mengetahui apakah Anda telah mengubah server yang terhubung, atau server-in-the-middle telah ditambahkan ke jaringan Anda untuk mengendus semua komunikasi Anda - sehingga hal ini menarik perhatian Anda.

Cukup hapus kunci dari known_hosts dengan menghapus entri yang relevan:

sed '4d' -i /var/lib/sss/pubconf/known_hosts

Ada 4ddi akunOffending RSA ...known_hosts:4


1
Terima kasih, tetapi saya tidak tahu mengapa, tetapi saya menghapusnya dan itu ada di dalamnya lagi. Saya telah mencoba menghentikan layanan sssd dan efek ini hilang, tetapi setelah memulai sssd, muncul lagi.
Filip Dobrovolný

Cadangkan direktori ~ / .ssh Anda lalu hapus. Apakah layanan Anda terus menambahkan kembali kunci setelah ~ / .ssh terpesona?
mockinterface

Saya telah mengganti nama .ssh ke .ssh_old, setelah mencoba menghubungkannya, buat saja direktori kosong .ssh. Dan saya masih tidak bisa membuat / var / lib / sss / pubconf / known_hosts "dapat diedit".
Filip Dobrovolný

4
Cara yang lebih portabel untuk melakukan ini: sed -i -e 4d /var/lib/sss/pubconf/known_hosts
Pierz

2
Bagaimana Anda membuat cadangan server identificationjika Anda ingin membangun kembali server tanpa menyebabkan gangguan seperti pesan kesalahan ini?
Ninjaxor

38

Sledgehammer adalah untuk menghapus setiap host yang dikenal dalam satu gerakan:

rm ~/.ssh/known_hosts

Saya menghadapi hal ini karena kami menggunakan subnet kecil dari server yang berumur pendek dari kotak lompat, dan sering memiliki alamat IP internal menggunakan kembali server yang berbagi kunci ssh yang sama.


Bekerja untuk saya di VM gelandangan ketika jawaban yang diterima tidak berhasil.
100pic

1
Alat yang berguna untuk berada di sabuk, tetapi ini bisa membuka Anda untuk serangan MitM (hal yang known_hostssebenarnya dimaksudkan untuk mencegah). Hanya lakukan ini jika Anda yakin bahwa semua host di sana aman.
Freedom_Ben

26

Masalahnya adalah bahwa Anda sebelumnya telah menerima koneksi SSH ke komputer jarak jauh dan sidik jari digital komputer atau kunci hash SHA256 telah berubah sejak Anda terhubung terakhir kali. Jadi ketika Anda mencoba SSH lagi atau menggunakan github untuk menarik kode, yang juga menggunakan SSH, Anda mendapatkan kesalahan. Mengapa? Karena Anda menggunakan alamat komputer jarak jauh yang sama seperti sebelumnya, tetapi komputer jarak jauh merespons dengan sidik jari yang berbeda. Oleh karena itu, ada kemungkinan seseorang memalsukan komputer yang sebelumnya Anda sambungkan. Ini adalah masalah keamanan.

Jika Anda 100% yakin bahwa komputer jarak jauh tidak dikompromikan, diretas, dipalsukan, dll. Yang perlu Anda lakukan adalah menghapus entri dalam file known_hosts Anda untuk komputer jarak jauh. Itu akan menyelesaikan masalah karena tidak akan ada lagi ketidakcocokan dengan ID sidik jari SHA256 saat menghubungkan.

Di Mac inilah yang saya lakukan:

1) Temukan jalur output yang bertuliskan RSA host key for servername:port has changed and you have requested strict checking.Anda akan membutuhkan nama server dan kemungkinan port dari output log itu.

2) Cadangkan file host SSH yang dikenal cp /Users/yourmacusername/.ssh/known_hosts /Users/yourmacusername/.ssh/known_hosts.bak

3) Temukan baris tempat sidik jari lama komputer disimpan dan hapus. Anda dapat mencari sidik jari komputer jarak jauh yang menyinggung tertentu menggunakan nama server dan port dari langkah # 1.nano /Users/yourmacusername/.ssh/known_hosts

4) CTRL-X untuk berhenti dan memilih Y untuk menyimpan perubahan

Sekarang ketik ssh -p port servernamedan Anda akan menerima prompt asli yang Anda lakukan saat pertama kali mencoba SSH ke komputer itu. Anda kemudian akan diberikan opsi untuk menyimpan sidik jari SHA256 yang diperbarui komputer jarak jauh itu ke file known_hosts Anda. Jika Anda menggunakan SSH melalui port 22 maka argumen -p tidak diperlukan.

Masalah apa pun yang dapat Anda pulihkan file asli known_hosts: cp /Users/yourmacusername/.ssh/known_hosts.bak /Users/yourmacusername/.ssh/known_hosts


3
Itu harus ditandai sebagai jawaban yang diterima. Mengikuti langkah-langkah itu memperbaiki masalah saya sementara ssh-keygen -R [IP_ADDRESS]tidak berhasil untuk saya. Terima kasih!
Yusuf Kamil AK

Ya, salah satu kasus itu tidak adil, jawaban terbaik pasti. Jawaban ke-2 dan ke-3 hanya mengulangi apa yang dikatakan ke-1, dan semuanya memiliki solusi yang tidak lengkap.
brasofilo

16

Seperti yang sudah banyak dikatakan, gunakan ssh-keygen, yaitu

ssh-keygen -R pong

Juga, Anda mungkin ingin mempertimbangkan untuk sementara waktu mematikan kunci host:

ssh -oStrictHostKeyChecking=no root@pong

apa yang saya gunakan untuk .ssh / config : Host ???? CheckHostIP no StrictHostKeyChecking no(3 baris, ditabulasikan mulai dari tanggal 2)
XXL

15

Bekerja untukku!

Kesalahan: Menyinggung kunci RSA di / var / lib / sss / pubconf / known_hosts: 4

Ini menunjukkan Anda memiliki kunci RSA yang menyinggung pada no. 4

Solusi 1 :

1. vi /var/lib/sss/pubconf/known_hosts

2 remove line no: 4 ..

3 Save and Exit, and Retry ..

Solusi 2:

ssh-keygen -R "you server hostname or ip"

ATAU

Solusi 3:

sed -i '4d' /root/.ssh/known_hosts

Ini akan menghapus 4thgaris /root/.ssh/known_hoststempat ( -i).


1
Ini berfungsi untuk file .ssh known_hosts root. Bukan untuk / var / lib / sss / pubconf / known_hosts, yang merupakan file yang dikelola oleh SSSD, dan diisi oleh server jauh.
Mercury00

1
pada kasus saya, untuk beberapa alasan, masalah terjadi pada known_hosts * 2 *. Mengikuti langkah-langkah ini membantu saya untuk mengetahuinya, terima kasih @Sahil Gulati!
Lucas

11

Saya menggunakan solusi mockinterface, meskipun sed -i tidak berfungsi, saya menyelesaikannya dengan menghapus garis dengan tangan dengan vim:

sudo vim /var/lib/sss/pubconf/known_hosts

Anda dapat menggunakan editor teks lain yang Anda inginkan, tetapi mungkin Anda harus menunjukkan hak administratif Anda


1
Ya, hapus catatan IP yang sama dalam file known_hosts akan menyelesaikan masalah.
Wherby

Entri langsung dibuat ulang oleh SSSD ketika mencoba ssh lagi. perhatikan bahwa sss pubconf known_hosts adalah file yang dikelola, bukan beberapa repositori lokal yang dihuni oleh server lokal.
Mercury00

9

Untuk pengguna Mac, Anda dapat menggunakan -Rbendera ssh-keygenperintah. Contoh cepat:

ssh-keygen -R THE_IP_ADDRESS

THE_IP_ADDRESSmenjadi IP yang Anda coba ssh. Dan kemudian Anda dapat terhubung dengan baik.


8

Ini karena pengaturan komputer jarak jauh Anda telah berubah. Hapus kunci Anda saat ini untuk itu.

vim /root/.ssh/known_hosts

Hapus garis IP yang Anda hubungkan.


7

Edit /home/hostname /.ssh/known_hosts, dan hapus 4 baris, dan simpan.

Kemudian jalankan ssh root@ponglagi, Anda akan melihat pesan seperti ini Are you sure you want to continue connecting (yes/no)? yes:, cukup cetak yes.

Catatan: Jika Anda punya masalah, baca petunjuknya terlebih dahulu, itu akan membantu.


Jawaban terbaik yang sebenarnya menjelaskan apa yang terjadi.
Prometheus

6

Jawaban lain di sini baik dan berfungsi, bagaimanapun, saya memecahkan masalah dengan menghapus ~/.ssh/known_hosts. Ini tentu memecahkan masalah, tetapi mungkin itu bukan pendekatan terbaik.


6

Dalam kasus saya itu terjadi karena saya sebelumnya memiliki koneksi ssh dengan mesin dengan ip yang sama (katakanlah 192.152.51.10) dan sistem sedang mempertimbangkan kunci RSA (disimpan di /home/user_name/.ssh/known_hosts) dari host sebelumnya yang menghasilkan tidak cocok.

Untuk mengatasi masalah ini, Anda harus menghapus kunci RSA yang tersimpan sebelumnya untuk ip 192.152.51.10 .

ssh-keygen -f "/home/user_name/.ssh/known_hosts" -R 192.152.51.10

5

Solusi satu-liner sederhana, diuji pada mac:

sed '/212.156.48.110/d' ~/.ssh/known_hosts > ~/.ssh/known_hosts

Menghapus hanya target IP host ssh dari host yang tahu.

di mana 212.156.48.110 diganti dengan alamat IP host target.

Penyebab : Terjadi karena target IP sudah dikenal untuk mesin yang berbeda karena penerusan port. Menghapus IP target sebelum menghubungkan akan memperbaiki masalah.


4

Gunakan perintah ini:

truncate -s 0 /home/SYSTEM_NAME/.ssh/known_hosts

Harap tambahkan penjelasan apa yang dilakukan perintah dan apa yang tidak.
Daniel W.

6
Mengapa Anda ingin memotong file? Anda kehilangan semua informasi, bahkan informasi yang sudah Anda verifikasi. Ini adalah metode yang buruk untuk bertindak terhadap kunci host publik tunggal yang diubah.
Daniel W.

1
ini adalah retasan total: D tetapi berhasil: D
Benjamin

Petunjuk: Ini juga menghapus semua informasi host lainnya. Jika Anda menjalankan skrip otomatis dari mesin Anda (seperti penyebaran), skrip tersebut mungkin rusak karena Anda harus mengonfirmasi ulang semua kunci host secara manual. Hanya untuk memberi peringatan kepada pengguna lain di sini yang ingin menggunakan solusi termudah.
Mateng

3

Hapus entri itu dari known_hosts menggunakan:

ssh-keygen -R *ip_address_or_hostname*

Ini akan menghapus IP atau nama host yang bermasalah dari file known_hosts dan mencoba untuk menyambung kembali.

Dari halaman manual:

-R hostname
Menghapus semua kunci milik nama host dari file diketahui_hosts. Opsi ini berguna untuk menghapus host hash (lihat opsi -H di atas).


3

Kerjakan saja:

cd /home/user/.ssh/-> di sini userakan menjadi nama pengguna Anda, yaitu/home/jon/ misalnya.

Kemudian

gedit known_hosts & dan hapus konten di dalamnya.

Sekarang sshlagi, itu seharusnya bekerja.


3

Jika Anda mencoba untuk terhubung ke menjalankan buruh pelabuhan pada port 2222 dengan perintah dan Anda mendapatkan kesalahan

mian@tdowrick2~$ ssh pos@localhost -p 2222

Kemudian untuk mengatasi masalah ini, pada komputer lokal Anda (mis. Mesin host bukan wadah) buka cd ~/.ssh/dan buka known_hostsfile dengan editor teks. Hapus baris yang dimulai dengan [localhost]:2222dan simpan file. Sekarang coba ssh lagi

mian@tdowrick2~$ ssh pos@localhost -p 2222

Kesalahan akan hilang tetapi Anda harus melakukannya setiap kali wadah restart.


2

Solusi saya adalah:

  1. vi ~/.ssh/known_hosts
  2. hapus baris yang berisi ip ingin terhubung Anda.

Ini lebih baik daripada menghapus semua known_hosts


Ini adalah jawaban yang sama dengan miota85 di bawah ini.
Daniel W.

2

Hanya masalah sisi klien (kunci duplikat untuk ip):

Memecahkan varian:

Untuk menghapus satu ip (port default 22):

ssh-keygen -f -R 7.7.7.7

Untuk satu ip ( port non default ):

ssh-keygen -f -R 7.7.7.7:333

Hapus semua ips dengan cepat:

cd ~; rm .ssh/known_hosts

7.7.7.7 - ssh ip server Anda terhubung

333 - port non standart


2

Terkadang, jika karena alasan apa pun, Anda perlu menginstal ulang server, ketika menghubungkan dengan ssh, kami akan menemukan bahwa server Anda mengatakan bahwa identifikasi telah berubah. Jika kita tahu bahwa itu bukan serangan , tetapi bahwa kita telah memulihkan sistem, kita dapat menghapus identifikasi lama dari known_hosts menggunakan ssh-keygen:

ssh-keygen -R <host/ip:hostname>
root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old

Saat menghubungkan lagi, kami akan meminta Anda untuk memvalidasi sidik jari baru:

ssh -l user <host/ip:hostname>
The authenticity of host '<host/ip:hostname>' can't 
be established.
RSA key fingerprint is 3f:3d:a0:bb:59:24:35:6d:e5:a0:1a:3f:9c:86:81:90.
Are you sure you want to continue connecting (yes/no)? yes

1

Saya punya masalah ini, dan alasannya sangat sederhana, saya memiliki alamat IP duplikat untuk ssh login, jadi setelah memodifikasi masalah ini, semua hal diselesaikan.


1

Saya memiliki kesalahan yang sama di mesin saya, dan saya menghapus known_hostsfile, dan setelah itu, berfungsi dengan baik.


1
Anda tidak ingin menghapus file Anda authorized_keysketika Anda memiliki masalah dengan known_hostsfile
jeb

0

LARUTAN:

1- hapus dari "$ HOME / .ssh / known_hosts" baris yang merujuk ke host yang tidak dapat dihubungkan.

2- jalankan perintah ini: ssh-keygen -R "IP_ADDRESSorHOSTNAME" (gantikan "IP_ADDRESSorHOSTNAME" dengan ip tujuan Anda atau nama host tujuan)

3- Coba lagi koneksi ssh (jika gagal silakan periksa izin pada direktori .ssh, itu harus 700)


0

Solusi saya di UBUNTU (linux):

1. Anda harus menghapus konten dari file "known_hosts" yang ada di "/home/YOUR_USERNAME/.ssh/known_hosts"

2.Hasilkan kunci ssh baru seperti "ssh-keygen -t rsa -C" your.email@example.com "-b 4096"

3. Copy-paste kunci ssh baru Anda di repositori git Anda (gitlab dalam kasus saya) kunci SSH.

Ini bekerja untuk saya!


-1

AWS EC2.

Temukan ip dalam pesan yang diberikannya kepada Anda.

Lari

vim /home/ec2-user/.ssh/known_hosts

Gunakan tombol panah untuk menemukan ip dari pesan dan klik.

dd

Ini akan menghapus baris itu lalu lari

:wp

Ini akan menghemat maka Anda baik untuk pergi.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.