Masalah koneksi SSH dengan kesalahan "Verifikasi kunci host gagal ..."


179

Saya dapat terhubung ke mesin Ubuntu lain di LAN saya melalui SSH. Pada kedua PC saya menginstal openssh-server tetapi dari komputer Ubuntu lain saya tidak dapat terhubung ke PC saya melalui SSH dan saya mendapatkan kesalahan ini:

Verifikasi kunci host gagal ...


1
Apakah Anda menggunakan nama host atau alamat IP?
Thorbjørn Ravn Andersen

Tidak serupa tetapi saya mendapatkan kesalahan yang sama tetapi karena masalah yang berbeda: serverfault.com/questions/494916/…
zengr

Ini bukan masalah khusus Ubuntu. Dapat terjadi dengan apa pun sshdari baris perintah.
MarkHu

Jawaban:


216

"Tuan rumah verifikasi kunci gagal" berarti bahwa tuan kunci remote host berubah.

SSH menyimpan kunci host dari host jarak jauh di ~/.ssh/known_hosts. Anda dapat mengedit file teks secara manual dan menghapus kunci lama (Anda dapat melihat nomor baris dalam pesan kesalahan), atau menggunakan

ssh-keygen -R hostname

Dari halaman manual :

-R hostname
Menghapus semua kunci milik hostname dari file known_hosts. Opsi ini berguna untuk menghapus host hash.

(yang saya pelajari dari jawaban untuk Apakah mungkin untuk menghapus kunci host tertentu dari file SSH's known_hosts? ).


4
Ini juga bisa berarti bahwa Anda tidak memiliki kunci host dari host jarak jauh. Misalnya, jika saya rm ~/.ssh/*, maka ssh -o BatchMode=yes root@somewhere, jika tidak ada hal lain yang salah, saya akan mendapatkan. Host key verification failed. Tidak penting jika Anda selalu interaktif, tetapi relevan untuk skrip yang mengalami kesalahan yang sama.
Ron Burk

Tidak mengherankan, ssh-keygen -R example.net:7999hasil Host example.net:7999 not found in known_hosts.
alex

Saya menghapus known_hostsfile dan ssh lagi. Itu berhasil.
Paris

file ~/.ssh/known_hoststidak dapat dibaca
João Pimentel Ferreira

128

Jika Anda menjalankan dalam situasi skrip / jarak jauh tertentu di mana Anda tidak memiliki akses interaktif ke kunci host-to-add-host, atasi seperti ini:

$ ssh -o StrictHostKeyChecking=no user@something.example.com uptime

Peringatan: Secara permanen menambahkan 'something.example.com, 10.11.12.13' (RSA) ke daftar host yang dikenal.


6
+1, ini adalah solusi yang jelek, tetapi dalam beberapa kasus proses pemantauan otomatis yang bekerja dengan perangkat yang terhubung dengan ip dymaic, ini adalah solusi yang sederhana dan dapat diterima.
Ninsuo

11
+1 Misalnya, untuk eksekusi Jenkins, ini adalah solusi yang bagus. Terima kasih
Lobo

5
@Lobo sangat setuju, saya menggunakannya untuk jenkins, yang kerensh """ssh -o StrictHostKeyChecking=No ec2-user@someIpAddress-e2e sudo service tomcat restart"""
prayagupd

Menyelamatkan Hidupku. Solusi penyelamat.
user1735921

10

Terkadang juga ada situasi ketika Anda bekerja pada konsol serial, kemudian memeriksa perintah di atas dalam mode verbose -vakan menunjukkan Anda /dev/ttytidak ada, sementara itu ada.

ssh -v user@hostname

Dalam kasus di atas, cukup hapus /dev/ttydan buat symlink /dev/ttyS0ke /dev/tty.

rm /dev/tty
ln -s /dev/ttyS0 /dev/tty

Sebagai alternatif, tambahkan id_rsa.pubke lokasi jarak jauh, sehingga kata sandi tidak diminta dan Anda mendapatkan akses masuk.


6
+1 untuk memberi saran untuk menggunakan parameter -v; ini dapat banyak membantu ketika men-debug masalah ssh.
daniel kullmann

8

Dalam kasus saya, ini disebabkan oleh masalah udev - tidak ada /dev/ttysimpul perangkat. Solusi bagi saya adalah:

sudo mknod -m 666 /dev/tty c 5 0

6

Di terminal:

ssh -o StrictHostKeyChecking=no -i YourPublicKey.pem user@example.com uptime

Pesan berikut, atau yang serupa, akan muncul:

Warning: Permanently added 'example.com, XX.XXX.XXX.XX' (ECDSA) to the list of known hosts.
 00:47:37 up 3 min,  0 users,  load average: 0.00, 0.00, 0.00

Kemudian, sambungkan ke EC2 Anda seperti biasa:

ssh -i YourPublickey.pem user@example.com

Saya mendapat command-line line 0: Bad yes/no/ask argument.karena Anda salah menggunakan 'Tidak' alih-alih 'tidak' sebagai argumen untukStrictHostKeyChecking
Axel Bregnsbo

3

Yah, itu hanya karena ubuntu kedua memerlukan koneksi dengan kunci dan bukan kata sandi.

Saya sarankan Anda menggunakan sudo dpkg-reconfigure openssh-serverPC Anda, dan kemudian itu akan berfungsi dengan baik. Ini akan mengatur ulang konfigurasi untuk openssh dan harus kembali ke otentikasi kata sandi standar.

Kemungkinan kedua adalah bahwa sudah ada kunci untuk ubuntu Anda yang lain di PC Anda, dan itu berubah sehingga tidak dikenali lagi. Dalam hal ini, Anda harus mengedit file .ssh/authorized_keysuntuk menghapus baris bermasalah mengidentifikasi ubuntu Anda.


3

Ini adalah utas lama dan saya hanya berlari melintasi jawaban ini, saya hanya akan menambahkan apa yang saya lakukan untuk menyelesaikan ini.

ssh-keygen -f "/home/USER/.ssh/known_hosts" -R HOSTNAME

Saya hanya melihat pesan kesalahan yang dilemparkan ke saya dan dikatakan untuk menjalankan perintah itu untuk menghapusnya dari daftar host. Setelah itu saya melakukan yang berikut:

ssh-copy-id HOSTNAME

Kemudian saya mengikuti petunjuk dari sana sampai saya bisa ssh ke server.


Sebagai perintah ini saya mendapatkan saran di ubuntu 12.4.
MaNKuR

2

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]:4231

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]:4231   // 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

$ sudo ssh root@www.website.net -p 4231                              // Try again

Semoga ini berhasil.


1

Anda harus mengubah kunci Anda dengan cara ini: Dari kesalahan yang Anda temukan, temukan kunci-host mana yang berubah, misalnya: Kunci ECDSA yang menyinggung di / Pengguna / pengguna-.

sed -i '5d' ~/.ssh/known_hosts

Perhatikan: Anda harus menjadi root atau memiliki hak istimewa untuk sudo.


Tidak, kecuali Anda melakukannya untuk orang lain, itu tidak memerlukan root atau sudo. Anda mengedit file di direktori home Anda. Kedua: untuk perintah untuk bekerja itu membutuhkan sed GNU.
techraf

Mungkin Anda benar, tetapi saya mencoba ssh dari Mac OSX ke ubuntu-server dan saya harus melakukannya. omong-omong terima kasih atas komentar Anda.
Amir.AG

1

Anda harus meletakkan kunci rsa dari host target ke host sumber /home/user/.ssh/known_hostsdengan menjalankan ini pada target

ssh-keyscan -t rsa @targethost

1

Mungkin Anda hanya perlu memasukkan "ya" ketika ssh mengonfirmasi bahwa Anda ingin terus terhubung.

Seperti di bawah.

The authenticity of host 'xxx' can't be established.
ECDSA key fingerprint is yyy.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'xxx' (ECDSA) to the list of known hosts.
Enter passphrase for key '/Users/ysy/.ssh/id_rsa':

Lalu masukkan kata sandi Anda.

Harap perhatikan "Apakah Anda yakin ingin terus terhubung (ya / tidak)? Ya ". Anda harus memasukkan ya, bukan masuk.


1

Selain secara ketat menonaktifkan pemeriksaan kunci host, Anda juga dapat terhubung dengan mengetik:

ssh -o LogLevel=quiet -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no <username@target_machine_ip_or_domain_name>

0

pico ~/.ssh/known_hosts dan hapus semua baris, setelah terhubung kembali dan Anda akan mendapatkan kunci baru.


6
Ini adalah solusi berbahaya, karena Anda akan menghapus SEMUA kunci host Anda. Solusi yang diterima, ssh-keygen -R hostnamelebih baik.
msanford

0

Solusi saya berasal dari posting blog ini: Negosiasi algoritma gagal untuk SSH Secure Shell Client

Anda perlu memodifikasi file sebagai berikut:

sudo nano /etc/ssh/sshd_config

Dan kemudian tambahkan yang berikut ini:

# Ciphers
Ciphers aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,arcfour
KexAlgorithms diffie-hellman-group1-sha1

Pada dasarnya Anda mencoba berbagai solusi sampai Anda menemukan satu yang dapat menyelesaikan masalah Anda. Jika solusi di atas tidak berhasil, silakan coba yang ini. Jika yang ini tidak berhasil juga, silakan coba yang lain.


0

Lakukan saja "sudo vi /var/root/.ssh/known_hosts" dan hapus baris, yang menyimpan kunci untuk host yang Anda coba sambungkan dan hubungkan kembali.

Saya tidak tahu tentang situasi khusus Anda, tetapi kemungkinan besar kesalahan ini muncul bersama pesan seperti ini:

my_mac:~ oivanche$ sudo ssh pi@192.168.0.45
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 ECDSA key sent by the remote host is
SHA256:sx1Z4xyGY9venBP6dIHAoBj0VhDOo7TUVCE2xWXpzQk.
Please contact your system administrator.
Add correct host key in /var/root/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /var/root/.ssh/known_hosts:74
ECDSA host key for 192.168.0.45 has changed and you have requested strict checking.
Host key verification failed.

Jika Anda akan membaca log dengan lebih hati-hati, Anda akan melihat bahwa kunci yang Anda dapatkan dari sebuah host bertentangan dengan kunci yang sudah Anda miliki - dalam hal ini ada di baris 74 dari file known_hosts (Kunci ECDSA yang menyinggung di / var / root / .ssh / known_hosts: 74). Hapus baris dari the known_hosts, simpan perubahan dan hubungkan kembali.


-1
chmod 666 /dev/tty 

adalah solusi tty lain - kadang-kadang, file perangkat ini memiliki izin yang salah.

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.