Cara memperbaiki peringatan tentang kunci host ECDSA


288

Saya mencoba menyiapkan SSH-tanpa-kata sandi pada server Ubuntu ssh-copy-id myuser@myserver, tetapi saya mendapatkan kesalahan:

Peringatan: kunci host ECDSA untuk 'myserver' berbeda dari kunci untuk alamat IP '192.168.1.123'

Apa yang menyebabkan ini, dan bagaimana cara memperbaikinya? Saya mencoba menghapus .sshdirektori pada mesin jarak jauh, dan berjalan ssh-keygen -R "myserver"secara lokal, tetapi ini tidak menyelesaikan kesalahan.


dalam kasus saya, saya mengubah server (ip) mengikat dengan domain, lalu The ECDSA host key for server has changed. Cara saya adalah menghapus string cache terkait tentang domain di ~/.ssh/known_hosts. Kemudian ssh bekerja.
Ninja

Jawaban:


417

Hapus kunci yang di-cache untuk 192.168.1.123di mesin lokal:

ssh-keygen -R 192.168.1.123

14
Tidak berfungsi untuk saya di server Debian yang baru dipasang di kantor saat SSHing masuk dari rumah. Juga, jawabannya cukup singkat.
Chris K

/home/wf/.ssh/known_hosts diperbarui. Konten asli dipertahankan sebagai /home/wf/.ssh/known_hosts.old "Peringatan: Secara permanen menambahkan kunci host ECDSA untuk alamat IP 'xxxx' ke daftar host yang dikenal." ditampilkan. dan kemudian tampaknya berhasil
Wolfgang Fahl

13
Anda dapat memperbarui kunci alih-alih menghapusnya. Gunakan ssh-keyscan -t ecdsa my.server.domain >> ~/.ssh/known_hostssetelah itu Anda tidak perlu memverifikasi kunci baru saat pertama kali terhubung ke host.
Alex

2
Untuk siapa yang tidak berhasil membuatnya berfungsi: Saya sudah mendaftarkan beberapa kejadian IP yang sama: 1 / alamat IP tersebut (xx.xx.xx.xx), domain (tomsihap.fr), penyedia server vps yang diberikan penyedia alamat (vpsxxx.ovh.net). ssh-keygen -R untuk masing-masing melakukan pekerjaan.
tomsihap

Bekerja untuk saya, tetapi kebingungan mungkin dari host mana yang harus dijalankan perintah ini? Jawabannya adalah dari salah satu yang menunjukkan kesalahan. Pertanyaan dan jawaban kedua lebih jelas, tetapi untuk berjaga-jaga: alamat mana yang akan diteruskan ke ssh-keygen -R? Alamat yang ditampilkan dalam pernyataan kesalahan.
Russ Bateman

63

Dalam kasus saya ssh-keygen -R ...tidak memperbaiki peringatan. Saya punya informasi tambahan seperti ini:

Offending key for IP in /home/myuser/.ssh/known_hosts:8
Matching host key in /home/myuser/.ssh/known_hosts:24

Saya cukup diedit ~/.ssh/known_hostsdan dihapus secara manual 8 baris ("kunci menyinggung"). Saya mencoba menyambung kembali, tuan rumah secara permanen ditambahkan, dan semuanya baik-baik saja setelah itu!


2
Bekerja seperti pesona. Dapat memperbaiki ini dalam satu baris dengan sed -e '8d' /home/myuser/.ssh/known_hosts, mengganti nomor baris 8dan nama file dengan yang ditampilkan pada sistem Anda.
Alex P. Miller

Masalah saya dengan pendekatan ini adalah agak membingungkan jika known_hosts:8merujuk pada nilai yang diindeks nol atau tidak. Senang mengetahui bahwa ini adalah pemetaan 1: 1 ...
Daniel F

Saya perhatikan ini terjadi jika Anda menggunakan port non-standar seperti 2022. Dalam hal ini, yang perlu Anda lakukanssh-keygen -R [hostname]:2022
Alexander Malfait

Jika saya menghapus ~/.ssh/known_hosts, saya mendapatkan pesan bahwa keasliannya tidak dapat dibuat dan "Apakah Anda yakin ingin terus terhubung". Menjawab "ya" mencoba dan gagal tersambung. Jika saya mencoba menghubungkan kedua kalinya, saya mendapatkan kesalahan kunci host ECDSA yang sama dengan yang saya mulai.
Aaron Franke

19

Saya melakukan banyak ssh-ing antara komputer LAN saya dan dua akun webhosting saya, jadi saya telah menyortir semua jenis peluang dan berakhir dengan SSH, termasuk masalah otentikasi menggunakan ssh -vuntuk melihat di mana dan apa yang salah.

Baru saja menyelesaikan masalah ini dan tidak senang dengan jawabannya, saya ingin benar-benar tahu "mengapa" saya sendiri ...

Pemicu untuk kasus saya adalah: menginstal OS server baru di tempat kerja dan setelah menginstal paket openssh-server, satu set kunci host baru dibuat di server kerja. Sebelumnya, semua OS server saya adalah Ubuntu dan kali ini berubah menjadi Debian (dan saya curiga ada perbedaan perbedaan dalam izin).

Ketika semua OS adalah Ubuntu dan saya menginstal ulang OS server, setelah SSH pertama masuk, saya mendapatkan peringatan semacam ini, yang saya lebih suka daripada peringatan diam di atas!

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
06:ea:f1:f8:db:75:5c:0c:af:15:d7:99:2d:ef:08:2a.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending key in /home/user/.ssh/known_hosts:4
RSA host key for domain.com has changed and you have requested strict checking.
Host key verification failed.

Lalu saya buka ~/.ssh/known_hostsdi komputer yang memulai ssh, hapus baris itu, sambungkan kembali dan ini terjadi:

chris@home ~ $ ssh work
The authenticity of host '[work]:11122 ([99.85.243.208]:11122)' can't be established.
ECDSA key fingerprint is 56:6d:13:be:fe:a0:29:ca:53:da:23:d6:1d:36:dd:c5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[work]:11122 ([99.85.243.208]:11122)' (ECDSA) to the list of known hosts.
Linux rock 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64

Itu sedikit tentang: 11122 adalah nomor port I rute SSH dari pada firewall

Saya memeriksa cadangan dari server Ubuntu lama dan berbeda dengan pemasangan Debian baru saya:

Ubuntu:                                            Debian:
# Package generated configuration file             # Package generated configuration file
# See the sshd(8) manpage for details              # See the sshd_config(5) manpage for details

# What ports, IPs and protocols we listen for      # What ports, IPs and protocols we listen for
Port 22                                            Port 22
# Use these options to restrict which interface    # Use these options to restrict which interfaces
#ListenAddress ::                                  #ListenAddress ::
#ListenAddress 0.0.0.0                             #ListenAddress 0.0.0.0
Protocol 2                                         Protocol 2
# HostKeys for protocol version 2                  # HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key                  HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key                  HostKey /etc/ssh/ssh_host_dsa_key
------------------------------------------------   HostKey /etc/ssh/ssh_host_ecdsa_key
#Privilege Separation is turned on for security    #Privilege Separation is turned on for security
UsePrivilegeSeparation yes                         UsePrivilegeSeparation yes

Jadi ya, sepertinya, tuan rumah mulai menggunakan kunci ecdsa baru-baru ini, yang berdasarkan perubahan Ubuntu belakangan ini, saya akan menyalahkan pembaruan. Pergeseran Ubuntu dari OS linux yang sangat saya andalkan adalah alasan mengapa saya menginstal Debian kali ini.

Saya membaca security.SE q / a di ecdsa dan telah menghapus baris itu dari sshd_configserver Debian baru saya. (dan berlari service ssh restart)


2
+1 untuk blok perbandingan berdampingan yang bagus. Bisakah Anda menambahkan URL yang mengklarifikasi "Pergeseran Ubuntu dari OS linux rock-solid" artinya?
bgoodr

@ Goodg adalah pendapat saya & semata-mata didasarkan pada pengaturan server file RAID saya sendiri beberapa kali selama beberapa tahun terakhir. : / Omong kosong untuk jawaban, tetapi mulai googling ubuntu debian serverdan Anda akan melihat apa yang saya maksud.
Chris K

1
@ Chris Anda, tuan, adalah bos. Terima kasih atas jawaban yang terperinci, namun ringkas.
sargas

6

Prompt terjadi setiap waktu karena alamat IP berubah setiap saat ketika menggunakan pengalamatan dinamis. Cobalah untuk menggunakan IP statis sehingga Anda hanya perlu menambahkan kunci sekali saja.


1
Poin yang bagus, apakah saya melewatkan di mana seseorang menyebutkan ips dinamis?
Chris K

6

ssh-keygen -f "/root/.ssh/known_hosts" -R 192.168.1.123

Ini harus mengganti kunci yang ada di bawah known_hosts.old dan membuat yang baru. Solusi ini bekerja untuk saya dalam skenario yang sama


3

Saya menambahkan baris-baris berikut ke ~ / .ssh / config saya, sehingga menonaktifkan host ketat yang memeriksa semua alamat lokal. (dengan alokasi alamat DHCP, alamat ip mesin lokal saya selalu berubah)

host *.local
    StrictHostKeyChecking no

Anda masih mendapatkan peringatan itu, yang menurut saya baik-baik saja.


2

Apakah Anda menggunakan pengguna yang sama untuk menghubungkan?

Jika Anda masuk ke PC lokal seperti pengguna John dan terhubung ke server B seperti pengguna Adolf @ B dan semuanya OK, itu tidak berarti semuanya baik-baik saja jika Anda masuk ke PC lokal seperti pengguna Jane dan menghubungkan ke server B seperti pengguna Adolf @ B .

Jika Anda ingin masuk di server B sebagai pengguna Beda dari PC A tanpa kata sandi, coba perintah ini, semua dari PC A :

ssh-keygen -t rsa

Perintah ini menghasilkan kunci dan menyimpan kunci dalam file. Harap kosongkan frasa sandi .

ssh Beda@B mkdir -p .ssh

Perintah ini membuat direktori, jika belum ada. Jika tidak, jangan cetak pesan kesalahan.

cd ~/.ssh

Perintah ini mengubah direktori ke direktori home pengguna Anda ./ssh.

cat id_rsa.pub | ssh Beda@B 'cat >> .ssh/authorized_keys'

Perintah ini mencetak file id_rsa.pub (kunci publik Anda) ke dalam otor_keys di server.

PENTING: Beda adalah nama pengguna Anda di server yang Anda sambungkan, B adalah IP server Anda.

Sekarang, Anda dapat terhubung ke server B tanpa kata sandi atau frasa sandi:

ssh Beda@B

1
Atau cukup gunakan ssh-copy-id untuk mengisi file yang diotorisasi dengan kunci id_rsa.pub Anda tanpa semua kerumitan tambahan.
BlakBat

1

Utas di sini dapat membantu.

Pada dasarnya, Anda ingin menghapus kunci RSA dan ECDSA untuk host itu, kemudian gunakan ssh-keyscanuntuk memasukkannya kembali ke known_hostsfile Anda dengan cara yang tidak akan menyebabkan konflik ini. Itu bekerja untuk saya ketika saya memiliki masalah yang sama.


1

Pertanyaan: Apa yang menyebabkan ini, ...?

Jadi kunci host server ssh berubah. Apa yang menyebabkan perubahan? Sulit dikatakan. Berikut ini beberapa tebakan:

  • Apakah sshd di server saya mulai menggunakan kunci ECDSA, jadi ini adalah jenis kunci baru?
  • Apakah myserver baru-baru ini diinstal ulang?
  • Apakah sshd pada server saya baru-baru ini di-insall sehingga kunci host ssh baru dibuat?
  • Apakah seseorang membuat ulang atau mengganti kunci host sshd?
  • Apakah alamat IP server saya berubah sehingga host lain menjawab alamat IP itu?

Pertanyaan: ... dan bagaimana cara memperbaikinya?

Seperti yang sudah dijawab orang lain, hapus kunci host ECDSA dalam cache untuk server saya yang telah di-cache akun Anda.


2
Saran yang bagus, tetapi sebenarnya tidak menjawab pertanyaan. Bahkan tidak MENCOBA untuk menjawab pertanyaan.
boatcoder

1

Kesalahan ini terus mengganggu saya untuk waktu yang lama. Untuk beberapa alasan itu membuat perbedaan apakah saya akan melakukan

ssh host

atau

ssh host.domain

https://askubuntu.com/questions/87449/how-to-disable-strict-host-key-checking-in-ssh

kemudian menunjuk saya ke opsi untuk mengubah file konfigurasi. Lihat skrip saya https://askubuntu.com/a/949731/129227 di sana untuk mengotomatiskan proses.


1
Menggunakan nilai konfigurasi CanonicalizeHostnamedan tidak CanonicalDomainsakan menghapus pemeriksaan ketat dan akan membuat ssh menganggap host dan host.domain sama.
BlakBat

0

Saya memperbaikinya di Chromebook dengan menghapus dan menginstal ulang Secure Shell ... Ini berfungsi seperti pesona.


Ini berlebihan. Lihat solusi yang lebih sederhana dalam jawaban saya di sini.
Alex Yursha

0

Berikut ini cara menghapus sidik jari host yang dikenal (dari known_hostsfile) di Chrome OS:

Temukan indeks entri host yang menyinggung dalam output ssh ketika koneksi gagal. Misalnya pada baris di bawah ini, indeks yang menyinggung adalah 7 :

Offending ECDSA key in /.ssh/known_hosts:7

Buka konsol JavaScript ( CTRL+ Shift+ J) dari jendela Secure Shell dan ketik berikut ini, ganti INDEXdengan nilai yang sesuai (misalnya 7 ):

term_.command.removeKnownHostByIndex(INDEX);

Solusi ini dipinjam dari Blog Leo Gaggl .

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.