Проблема соединения SSH с ошибкой «Проверка ключа хоста…»

179

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

Ошибка проверки ключа хоста ...

Навид
источник
1
Вы используете имена хостов или IP-адреса?
Турбьерн Равн Андерсен
Не похоже, но я получил ту же ошибку, но из-за другой проблемы: serverfault.com/questions/494916/…
zengr
Это не специфичная для Ubuntu проблема. Может произойти с любым sshиз командной строки.
MarkHu

Ответы:

216

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

SSH хранит ключи хостов удаленных хостов в ~/.ssh/known_hosts. Вы можете либо отредактировать этот текстовый файл вручную и удалить старый ключ (номер строки можно увидеть в сообщении об ошибке), либо использовать

ssh-keygen -R hostname

С man-страницы :

-R hostname
Удаляет все ключи, принадлежащие имени хоста, из файла known_hosts. Эта опция полезна для удаления хэшированных хостов.

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

elmicha
источник
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

Предупреждение: навсегда добавлен файл «thing.example.com, 10.11.12.13 »(RSA) в список известных хостов.

MarkHu
источник
6
+1, это уродливое решение, но в некоторых случаях автоматизированных процессов мониторинга, которые работают с подключенными к IP-адресам устройствами, это простое и приемлемое решение.
Ninsuo
11
+1 Например, для казни Дженкинса это хорошее решение. Спасибо
Лобо
5
@ Лобо не может согласиться, я использую это для Дженкинс, что крутоsh """ssh -o StrictHostKeyChecking=No ec2-user@someIpAddress-e2e sudo service tomcat restart"""
praagagupd
Спас мою жизнь. Решение для спасения жизни.
user1735921
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удаленное местоположение, чтобы пароль не запрашивался, и вы получаете доступ для входа в систему.

Peeyush
источник
6
+1 за совет использовать параметр -v; это может очень помочь при отладке проблем с ssh.
Даниэль Куллманн
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.

MP0
источник
3

Это старая ветка, и я только что наткнулся на этот ответ, я просто добавлю, что я сделал, чтобы решить эту проблему.

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

Я просто посмотрел на сообщение об ошибке, которое он мне выдал, и сказал, что нужно выполнить эту команду, чтобы удалить ее из списка хостов. После этого я сделал следующее:

ssh-copy-id HOSTNAME

Затем я следовал указаниям оттуда, пока не смог войти в ssh на сервер.

Хатем Джабер
источник
В качестве этой команды я получаю предложение в 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_hosts:5 сказал, что 5-й ключ изменен, поэтому сделайте так:

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

Обратите внимание: вы должны быть пользователем root или иметь права на sudo.

Amir.AG
источник
Нет, если вы не делаете это для кого-то другого, это не требует ни root, ни sudo. Вы редактируете файл в своем домашнем каталоге. Второе: для работы команды требуется GNU sed.
Techraf
Может быть, вы правы, но я попытался SSH с 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':

Затем введите свой пароль.

Пожалуйста, обратите внимание на «Вы уверены, что хотите продолжить подключение (да / нет)? Да ». Вы должны ввести да, а не войти.

JChen___
источник
1

Помимо строгого отключения проверки ключа хоста, вы также можете подключиться, набрав:

ssh -o LogLevel=quiet -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no <username@target_machine_ip_or_domain_name>
Farshid
источник
0

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

H0nsu
источник
6
Это опасное решение, потому что вы удалите ВСЕ ключи хоста. Принятое решение, ssh-keygen -R hostnameлучше.
msanford
0

Мое решение взято из этого сообщения в блоге: согласование алгоритма не удалось для SSH Secure Shell Client

Вам нужно изменить файл следующим образом:

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 файла known_hosts (Официрующий ключ ECDSA в / var / корень / .ssh / known_hosts: 74). Удалите строку из known_hosts, сохраните изменения и переподключите.

Александр Иванченко
источник
-1
chmod 666 /dev/tty 

это еще одно решение tty - иногда этот файл устройства имеет неправильные разрешения.

Alex
источник