Проблема підключення SSH із помилкою "Перевірка ключа хоста ..."


179

Я можу підключитися до іншої машини Ubuntu у своїй локальній мережі через SSH. На обох тодішніх ПК я встановив openssh-сервер, але з іншого комп'ютера Ubuntu я не можу підключитися до свого ПК через SSH, і я отримав цю помилку:

Помилка перевірки ключа хоста ...


1
Ви використовуєте імена хостів або IP-адреси?
Thorbjørn Ravn Andersen

Не схоже, але я отримав ту саму помилку, але через іншу проблему: serverfault.com/questions/494916/…
zengr

Це не проблема Ubuntu. Може статися з будь-яким sshіз командного рядка.
MarkHu

Відповіді:


216

«Host ключ не вдалось виконати перевірку» означає , що хост - ключ віддаленого хоста був змінений.

SSH зберігає ключі хостів віддалених хостів у ~/.ssh/known_hosts. Ви можете редагувати цей текстовий файл вручну та видалити старий ключ (ви можете побачити номер рядка у повідомленні про помилку) або скористатися

ssh-keygen -R hostname

З чоловічої сторінки :

-R ім'я хоста
Видаляє всі ключі, що належать імені хоста, з відомого файлу_hosts. Цей параметр корисний для видалення хешованих хостів.

(про що я дізнався з відповіді на питання: Чи можливо видалити певний хост-ключ із файлу знаних_хостів SSH? ).


4
Це також може означати, що у вас просто немає ключа хоста віддаленого хоста. Наприклад, якщо я rm ~/.ssh/*, ssh -o BatchMode=yes root@somewhereякщо нічого іншого не так, я отримаю Host key verification failed. Не важливо, якщо ви завжди інтерактивний, але релевантний для сценаріїв, які стикаються з однаковою помилкою.
Рон Берк

Не дивно, що ssh-keygen -R example.net:7999врожайність Host example.net:7999 not found in known_hosts.
alex

Я знову видалив known_hostsфайл і ssh. Це спрацювало.
ParisaN

файл ~/.ssh/known_hostsне читабельний
João Pimentel Ferreira

128

Якщо ви працюєте в певних віддалених ситуаціях / сценаріях, коли вам не вистачає інтерактивного доступу до підказки для додавання-хостінгу, працюйте навколо цього так:

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

Попередження: Постійно додано "something.example.com, 10.11.12.13" (RSA) до списку відомих хостів.


6
+1, це потворне рішення, але в деяких випадках автоматизованих процесів моніторингу, які працюють з динамічними пристроями, підключеними до ip, це просте і прийнятне рішення.
Ninsuo

11
+1 Наприклад, для страт Дженкінса це хороше рішення. Спасибі
Лобо

5
@Lobo не можу погодитися більше, я використовую це для jenkins, що крутоsh """ssh -o StrictHostKeyChecking=No ec2-user@someIpAddress-e2e sudo service tomcat restart"""
prayagupd

Врятувало моє життя. Рішення щодо збереження життя.
користувач1735921

10

Також іноді трапляється ситуація, коли ви працюєте над послідовною консоллю, тоді перевірка вищевказаної команди у багатослівному режимі -vпокаже /dev/tty, що її немає, поки вона є.

ssh -v user@hostname

У наведеному вище випадку просто видаліть /dev/ttyі створіть символьне посилання /dev/ttyS0на /dev/tty.

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

Як альтернативу, додайте id_rsa.pubдо віддаленого місця, щоб пароль не запитувався, і ви отримаєте доступ для входу.


6
+1 для поради щодо використання параметра -v; це може дуже допомогти при налагодженні ssh-проблем.
daniel kullmann

8

У моєму випадку це було викликано проблемою udev - не було /dev/ttyвузла пристрою. Для мене рішення було просто:

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

6

На терміналі:

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

З'явиться таке повідомлення чи подібне:

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

Потім підключіться до свого EC2 як звичайно:

ssh -i YourPublickey.pem user@example.com

Я отримав, command-line line 0: Bad yes/no/ask argument.тому що ви неправильно використовуєте "Ні" замість "ні" в якості аргументуStrictHostKeyChecking
Аксель Брегнсбо

3

Ну, просто тому, що другий ubuntu вимагає з'єднання за ключем, а не паролем.

Я пропоную вам використовувати sudo dpkg-reconfigure openssh-serverна своєму ПК, і тоді він повинен працювати належним чином. Він скине конфігурацію для openssh і повинен повернутися до автентифікації пароля за замовчуванням.

Друга можливість полягає в тому, що в вашому ПК вже є ключ для вашого іншого ubuntu, і він змінився, таким чином, більше не розпізнається. У цьому випадку вам доведеться відредагувати файл, .ssh/authorized_keysщоб видалити проблемну лінію, що ідентифікує ваш ubuntu.


3

Це стара нитка, і я просто наткнувся на цю відповідь, я просто додам те, що зробив, щоб вирішити це.

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

Я просто переглянув повідомлення про помилку, яке воно накинуло на мене, і сказало запустити цю команду, щоб видалити її зі списку хостів. Після цього я зробив наступне:

ssh-copy-id HOSTNAME

Тоді я дотримувався підказок звідти, поки мені не вдалося вторгнутись у сервер.


Як цю команду я отримую як пропозицію в ubuntu 12.4.
MaNKuR

2

Це означає, що ваш ключ віддаленого хоста змінено (може бути змінено пароль хоста),

Ваш термінал запропонував виконати цю команду як користувач root

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

Ви повинні видалити це ім'я хоста зі списку хостів на своєму ПК / сервері. Скопіюйте запропоновану команду та виконайте як користувач 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

Сподіваюся, це працює.


1

Ви повинні змінити свій ключ таким чином: з вашої заданої помилки знайдіть, який ключ хоста змінився, наприклад: Нарушення ключа ECDSA у /Users/user-name/.ssh/known_hostsgery сказала, що 5-й ключ змінено, так що зробіть це:

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

Зауважте: ви повинні мати root або мати привілей на sudo.


Ні, якщо ви це робите для когось іншого, для цього не потрібно кореня, ані судо. Ви редагуєте файл у своєму домашньому каталозі. По-друге: для роботи команди потрібно GNU sed.
техраф

Можливо, ви маєте рацію, але я спробував перейти з Mac OSX на ubuntu-сервер, і я повинен це зробити. до речі дякую за ваш коментар.
Amir.AG

1

Ви повинні ввести ключ rsa цільового хоста у вихідний хост /home/user/.ssh/known_hosts, запустивши його на цілі

ssh-keyscan -t rsa @targethost

1

Можливо, вам просто потрібно ввести "так", коли ssh підтвердить, що ви хочете продовжувати з'єднання.

Як внизу.

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':

Потім введіть свій пароль.

Зверніть увагу на "Ви впевнені, що хочете продовжувати з'єднання (так / ні)? Так ". Ви повинні ввести так, а не вводити.


1

Окрім суворого відключення перевірки ключів хоста, ви також можете підключитися, ввівши:

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

0

pico ~/.ssh/known_hosts та видаліть усі рядки, після того як тільки підключіться, і ви отримаєте новий ключ.


6
Це небезпечне рішення, адже ви видалите ВСІ свої хост-ключі. Прийняте рішення, ssh-keygen -R hostnameкраще.
msanford

0

Моє рішення походить із цього повідомлення в блозі: не вдалося узгодити алгоритм для клієнта SSH Secure Shell

Вам потрібно змінити файл таким чином:

sudo nano /etc/ssh/sshd_config

А потім додайте наступне:

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

В основному ви пробували різні рішення, поки не знайдете рішення, яке може вирішити вашу проблему. Якщо вищезазначені рішення не працюють, спробуйте це. Якщо ця також не працює, спробуйте інші.


0

Просто зробіть "sudo vi /var/root/.ssh/known_hosts" та видаліть рядок, який містить ключ для хоста, до якого ви намагаєтесь підключитися та знову підключитися.

Я не знаю про вашу конкретну ситуацію, але, швидше за все, ця помилка сталася разом із таким повідомленням:

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.

Якщо ви уважніше прочитаєте журнал, ви побачите, що ключ, який ви отримали від хоста, суперечить ключу, який у вас уже є - у цьому випадку він знаходиться у рядку 74 файла відомого_hosts (Offending ECDSA key in / var / root / .ssh / known_hosts: 74). Видаліть рядок з відомих_хостів, збережіть зміни та підключіться знову.


-1
chmod 666 /dev/tty 

це ще одне tty рішення - іноді цей файл пристрою має неправильні дозволи.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.