Я только что попытался подключиться по SSH к серверу, который я делал без проблем некоторое время, и получил предупреждение о том, что ключ хоста сервера изменился.
Но это не так!
На сервере я проверил ключ хостов, на который есть ссылка в /etc/ssh/sshd_config
, и это не изменилось.
На клиенте проверил known_hosts
файл, и существующая запись в нем имеет правильный открытый ключ. Я попытался временно переместить файл known_hosts и установить StrictHostKeyChecking
к no
в /etc/ssh/ssh_config
чтобы он автоматически подключился, чтобы я мог сравнить открытый ключ. Когда я сделал это и проверил новую запись в known_hosts
, часть открытого ключа идентична предыдущей!
Так почему бы ему не подключиться? Единственное, что отличается в known_hosts
это соль и хэш имени хоста. Но поскольку я и всегда подключаюсь через IP и порт, без использования имени хоста, они, безусловно, должны быть правильными.
Любые идеи?
Обратите внимание, что это сообщение получают все клиенты, которые пытались подключиться, которые ранее подключались. Так что это не проблема с клиентом.
РЕДАКТИРОВАТЬ: я должен добавить, что когда я подключился к StrictHostKeyChecking
установлен в no
и это создало новый known_hosts
файл, когда я снова попытался подключиться, используя новый known_hosts
файл и StrictHostKeyChecking
вернуться к yes
, он подключился без предупреждения. Другими словами, новый known_hosts
файл работал без предупреждения, а старый - нет, несмотря на то, что внутри был тот же открытый ключ.
Вы не должны вообще отключать проверку ключа хоста для этого теста. Когда появляется сообщение об ошибке о конфликте, оно печатает отпечаток пальца и, как говорит Дэвид, сообщает вам, какая запись в файле known_hosts не совпадает.
Вы можете сравнить отпечаток пальца с ключом хоста; Я не знаю наверняка, но поиск в Интернете вам скажет.
Что-то вроде ssh-keygen -l -f server-public-key.txt
[linuxforms] сделает это.
Кроме того, использование ssh -vv и проверка /var/log/auth.log (или аналогичного) должны рассказать вам больше о проблеме.