Идентификация удаленного хоста ssh изменилась


620

Я переустановил свой сервер и получаю следующие сообщения:

[user@hostname ~]$ ssh root@pong
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 RSA key sent by the remote host is
6e:45:f9:a8:af:38:3d:a1:a5:c7:76:1d:02:f8:77:00.
Please contact your system administrator.
Add correct host key in /home/hostname /.ssh/known_hosts to get rid of this message.
Offending RSA key in /var/lib/sss/pubconf/known_hosts:4
RSA host key for pong has changed and you have requested strict checking.
Host key verification failed.

Я пробовал различные решения, которые я нашел в Интернете. Мой known_hostsфайл (обычно в ~/.ssh/known_hosts) находится в /var/lib/sss/pubconf/known_hosts. Я пытался редактировать его, но он остается в одном состоянии. Я установил ipa-клиент и установил Fedora 19. Как мне разрешить это предупреждение?

Все ответы до сих пор работают, только если у вас не установлен Freeipa.

Правильный ответ для freeipa в комментариях ниже от Адрина находится здесь .


1
только что выяснили, что эта проблема может возникнуть, если у вас конфликт IP-адресов. nslookup ваш ip для более
подробной

1
Здесь тупик. Этот элемент помечен как дубликат, поэтому никто не может добавить ответ, а тот, на который он ссылается, помечен вне темы, поэтому никто не может также добавить ответ. Если вы удалите известные_хосты, это также исправит проблему.
Zar

1
У меня такая же проблема. Ради меня и других, вот вопрос и мой ответ на него: superuser.com/questions/1071204/…
adrin

3
Как кто-то, кто сначала хочет проверить свой ключ, я нашел этот ответ полезным. askubuntu.com/a/83499/620623
Деклан МакКенна

Как замечает Шарраджеш: проверьте свои записи DNS (в FreeIPA для меня) и убедитесь, что у вас нет нескольких записей A с IP-адресами, которые недоступны из сети.
th3penguinwhisperer

Ответы:


1072

Вот самое простое решение

ssh-keygen -R <host>

Например,

ssh-keygen -R 192.168.3.10

С ssh-keygenman-страницы :

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

Я на Windows, и это решение, а также удаление ключа, не работает, что еще я могу попробовать?
jaycode

5
Хорошо, оказывается, на Windows мне нужно использовать терминал из git bash для этого (или любой терминал MingW32). Tricky.
jaycode

25
Имейте в виду, что если вы подключены через определенный порт, вам, возможно, придется удалить с синтаксисом, как ssh-keygen -R [127.0.0.1]:3022. Просто проверьте ваш файл .ssh / known_hosts на то, что он явно говорит.
Адам Джонс

4
Когда я пытаюсь это сделать, я получаю сообщение об ошибке "<имя_хоста> не найдено в ~ / .ssh / known_hosts"
Nodeocrat

3
Почему возникает это предупреждение?
Вилас Джоши

199

использование

ssh-keygen -R [hostname]

Пример с IP-адресом / именем хоста:

ssh-keygen -R 168.9.9.2

Это обновит оскорбления вашего хоста от known_hosts. Вы также можете указать путь к известному_хосту с флагом -f.


1
Удаление соответствующего ключа $ ssh-keygen -R {server.name.com}| $ ssh-keygen -R {ssh.server.ip.address}| $ ssh-keygen -R server.example.com
DaddyMoe

5
Как ответ без объяснения вызывает так много откликов ... без проблем с безопасностью, без объяснений .... -1
Даниэль В.

4
Это также похоже на копию другого ответа ниже. Пожалуйста, мод уберите этот беспорядок ...
Даниэль В.

115

У меня была такая же ошибка после воссоздания образа Digital Ocean Ubuntu. Я использовал следующую команду с IP моего сервера вместо[IP_ADDRESS]

ssh-keygen -R [IP_ADDRESS]

Спасибо огромное! Я использовал имя хоста, и оно работало только с IP_ADDRESS :)
J. Lopes

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

Ваша была не та же ошибка; ваш сервер не работал SSSD. Смотрите ОП.
Mercury00

39

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

Просто удалите ключ из known_hosts, удалив соответствующую запись:

sed '4d' -i /var/lib/sss/pubconf/known_hosts

На 4dсчетуOffending RSA ...known_hosts:4


1
Спасибо, но я не знаю почему, но я удаляю его, и оно снова в нем. У меня есть попытки остановить службу sssd, и этот эффект исчез, но после запуска sssd он появляется снова.
Филипп Добровольный

Сделайте резервную копию вашего каталога ~ / .ssh и затем удалите его. Ваш сервис продолжает добавлять ключи после того, как ~ / .ssh был удален?
mockinterface

Я переименовал .ssh в .ssh_old, после новой попытки подключения просто создайте пустой каталог .ssh. И я до сих пор не могу сделать / var / lib / sss / pubconf / known_hosts "редактируемым".
Филипп Добровольный

4
Более портативный способ сделать это: sed -i -e 4d /var/lib/sss/pubconf/known_hosts
Pierz

2
Как выполнить резервное копирование сервера на identificationтот случай, если вы хотите восстановить сервер, не вызывая сбоев, подобных этому сообщению об ошибке?
Ниндзяксор

38

Кувалдой нужно убрать всех известных хозяев одним махом:

rm ~/.ssh/known_hosts

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


У меня работал на бродячей ВМ, когда принятый ответ не работал.
100pic

1
Полезный инструмент, чтобы иметь в поясе, но это может открыть вас для атаки MitM (точная вещь, которая known_hostsпредназначена для предотвращения). Делайте это только в том случае, если вы уверены, что все хосты в безопасности.
Freedom_Ben

26

Проблема заключается в том, что ранее вы приняли SSH-соединение с удаленным компьютером, а цифровой отпечаток этого удаленного компьютера или хэш-ключ SHA256 изменились с момента вашего последнего подключения. Таким образом, когда вы снова пытаетесь использовать SSH или используете github для извлечения кода, который также использует SSH, вы получаете сообщение об ошибке. Почему? Потому что вы используете тот же адрес удаленного компьютера, что и раньше, но удаленный компьютер отвечает другим отпечатком. Поэтому возможно, что кто-то подделывает компьютер, к которому вы ранее подключались. Это проблема безопасности.

Если вы на 100% уверены, что удаленный компьютер не взломан, не взломан, не подделан и т. Д., Все, что вам нужно сделать, - это удалить запись в файле known_hosts для удаленного компьютера. Это решит проблему, так как больше не будет несоответствия с идентификаторами отпечатков пальцев SHA256 при подключении.

На Mac вот что я сделал:

1) Найдите строку вывода, которая гласит: RSA host key for servername:port has changed and you have requested strict checking.Вам понадобится и имя сервера, и, возможно, порт из этого вывода журнала.

2) Создайте резервную копию файла известных хостов SSH cp /Users/yourmacusername/.ssh/known_hosts /Users/yourmacusername/.ssh/known_hosts.bak

3) Найдите строку, где хранится старый отпечаток компьютера, и удалите его. На шаге 1 вы можете выполнить поиск конкретного оскорбительного отпечатка пальца удаленного компьютера, используя имя сервера и порт.nano /Users/yourmacusername/.ssh/known_hosts

4) CTRL-X, чтобы выйти и выбрать Y, чтобы сохранить изменения

Теперь введите, ssh -p port servernameи вы получите исходное приглашение, которое вы делали при первой попытке SSH к этому компьютеру. Затем вам будет предоставлена ​​возможность сохранить обновленный отпечаток SHA256 этого удаленного компьютера в ваш файл known_hosts. Если вы используете SSH через порт 22, то аргумент -p необязателен.

Любые проблемы, которые вы можете восстановить оригинальный файл known_hosts: cp /Users/yourmacusername/.ssh/known_hosts.bak /Users/yourmacusername/.ssh/known_hosts


3
Это должно быть помечено как принятый ответ. После того, как эти шаги решили мою проблему, пока ssh-keygen -R [IP_ADDRESS]не работает для меня. Спасибо!
Юсуф Камиль А.К.

Да, один из тех случаев, который не справедлив, лучший ответ наверняка. 2-й и 3-й ответы просто повторяют сказанное 1-м, и у всех них есть неполное решение.
brasofilo

16

Как уже говорили многие, используют ssh-keygen, т.е.

ssh-keygen -R pong

Также вы можете временно отключить проверку ключа хоста:

ssh -oStrictHostKeyChecking=no root@pong

что я использую для .ssh / config : Host ???? CheckHostIP no StrictHostKeyChecking no(3 строки, табулированные, начиная со 2-го)
XXL

15

Работает для меня!

Ошибка: ключ RSA в / var / lib / sss / pubconf / known_hosts: 4

Это означает, что у вас есть неправильный ключ RSA в строке №. 4

Решение 1 :

1. vi /var/lib/sss/pubconf/known_hosts

2 remove line no: 4 ..

3 Save and Exit, and Retry ..

Решение 2:

ssh-keygen -R "you server hostname or ip"

ИЛИ

Решение 3:

sed -i '4d' /root/.ssh/known_hosts

Это удалит 4thстроку /root/.ssh/known_hostsна месте ( -i).


1
Это работает для файла root .ssh known_hosts. Не для / var / lib / sss / pubconf / known_hosts, который является управляемым файлом SSSD и заполняется удаленным сервером.
Mercury00

1
в моем случае по какой-то причине проблема произошла на known_hosts * 2 *. Следующие шаги помогли мне это выяснить, спасибо @Sahil Gulati!
Лукас

11

Я использовал решение mockinterface, хотя sed -i не совсем работал, я решил его, удалив строку вручную с помощью vim:

sudo vim /var/lib/sss/pubconf/known_hosts

Вы можете использовать любой другой текстовый редактор, который вам нужен, но, вероятно, вам нужно будет показать свои административные права


1
Да, удаление записи того же IP в файле known_hosts решит проблему.
Верби

Запись мгновенно воссоздается SSSD при повторной попытке ssh. обратите внимание, что sss pubconf known_hosts - это управляемый файл, а не какой-то локальный репозиторий, заполненный локальным сервером.
Mercury00

9

Для пользователей Mac вы можете использовать -Rфлаг ssh-keygenкоманды. Быстрый пример:

ssh-keygen -R THE_IP_ADDRESS

THE_IP_ADDRESSБудучи IP, вы пытаетесь ssh в. И тогда вы можете подключиться нормально.


8

Это потому, что настройки вашего удаленного компьютера изменились. Удалите свои текущие ключи для этого.

vim /root/.ssh/known_hosts

Удалите строку IP-адреса, который вы подключаете.


7

Отредактируйте /home/hostname /.ssh/known_hostsи удалите 4 строки и сохраните их.

Затем запустите ssh root@pongснова, вы увидите сообщение, как это:, Are you sure you want to continue connecting (yes/no)? yesпросто распечатать yes.

Примечание: если у вас возникли проблемы, сначала прочтите подсказки, это поможет.


Лучший ответ, который на самом деле объясняет, что происходит.
Прометей

6

Другие ответы здесь хороши и работают, во всяком случае, я решил проблему, удалив ~/.ssh/known_hosts. Это, конечно, решает проблему, но, вероятно, это не лучший подход.


6

В моем случае это произошло из-за того, что у меня ранее было ssh-соединение с машиной с тем же ip (скажем, 192.152.51.10), и система рассматривала ключ RSA (хранящийся в /home/user_name/.ssh/known_hosts) предыдущего хоста, что привело к в несоответствии.

Чтобы решить эту проблему, вы должны удалить ранее сохраненный ключ RSA для IP 192.152.51.10 .

ssh-keygen -f "/home/user_name/.ssh/known_hosts" -R 192.152.51.10

5

Простое однострочное решение, протестированное на Mac:

sed '/212.156.48.110/d' ~/.ssh/known_hosts > ~/.ssh/known_hosts

Удаляет только целевой IP-адрес хоста ssh из известных хостов.

где 212.156.48.110 заменяется IP-адресом целевого хоста.

Причина . Произошло потому, что целевой IP-адрес уже был известен другой машине из-за переадресации портов. Удаление целевого IP перед подключением решит проблему.


4

Используйте эту команду:

truncate -s 0 /home/SYSTEM_NAME/.ssh/known_hosts

Пожалуйста, добавьте объяснение, что команда делает, а что нет.
Даниэль В.

6
Почему вы хотите обрезать файл? Вы теряете всю информацию, даже информацию, которую вы уже подтвердили. Это плохой способ действовать против одного измененного открытого ключа хоста.
Даниэль В.

1
это полный взлом: D, но это работает: D
Бенджамин

Подсказка: при этом также удаляется вся другая информация о хосте. Если вы запускаете автоматизированные сценарии со своего компьютера (например, развертывания), они могут сломаться, потому что вам необходимо вручную подтвердить все ключи хоста. Просто чтобы предупредить других пользователей, которые хотят использовать самое простое решение.
Mateng

3

Удалите эту запись из known_hosts, используя:

ssh-keygen -R *ip_address_or_hostname*

Это удалит проблемный IP-адрес или имя хоста из файла known_hosts и попытается подключиться снова.

Из справочных страниц:

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


3

Просто делать:

cd /home/user/.ssh/-> здесь userбудет ваше имя пользователя, т.е. /home/jon/например.

затем

gedit known_hosts & и удалите содержимое внутри него.

Теперь sshснова, это должно работать.


3

Если вы пытаетесь подключиться к работающему Docker-контейнеру через порт 2222 с помощью команды, и вы получаете сообщение об ошибке

mian@tdowrick2~$ ssh pos@localhost -p 2222

Затем, чтобы решить эту проблему, на вашем локальном компьютере (т.е. на хост-машине, а не на контейнере) перейдите cd ~/.ssh/и откройте known_hostsфайл в текстовом редакторе. Удалите строку, начинающуюся с, [localhost]:2222и сохраните файл. Теперь попробуйте снова SSH

mian@tdowrick2~$ ssh pos@localhost -p 2222

Ошибка исчезнет, ​​но вы должны будете делать это каждый раз при перезапуске контейнера.


2

Мое решение:

  1. vi ~/.ssh/known_hosts
  2. удалите строку, содержащую ваш IP-адрес.

Это лучше, чем удалить все known_hosts


Это тот же ответ, что и miota85 ниже.
Даниэль В.

2

Проблема только на стороне клиента (дубликат ключа для ip):

Решить варианты:

Для очистки одного IP (порт по умолчанию 22):

ssh-keygen -f -R 7.7.7.7

Для одного ip ( не порта по умолчанию ):

ssh-keygen -f -R 7.7.7.7:333

Быстро очистить все ips:

cd ~; rm .ssh/known_hosts

7.7.7.7 - ssh ваш сервер ip connect

333 - нестандартный порт


2

Иногда, если по какой-либо причине вам необходимо переустановить сервер, при подключении по ssh мы обнаружим, что ваш сервер сообщает, что идентификация изменилась. Если мы знаем, что это не атака , а то, что мы восстановили систему, мы можем удалить старую идентификацию из known_hosts, используя ssh-keygen:

ssh-keygen -R <host/ip:hostname>
root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old

При повторном подключении мы попросим вас подтвердить новый отпечаток:

ssh -l user <host/ip:hostname>
The authenticity of host '<host/ip:hostname>' can't 
be established.
RSA key fingerprint is 3f:3d:a0:bb:59:24:35:6d:e5:a0:1a:3f:9c:86:81:90.
Are you sure you want to continue connecting (yes/no)? yes

1

У меня была эта проблема, и причина очень проста, у меня есть дублированный IP-адрес для входа в ssh, поэтому после изменения этой проблемы все решается.


1

У меня была такая же ошибка на моей машине, и я очищаю known_hostsфайл, и после этого он работает нормально.


1
Вы не хотите удалять свою, authorized_keysкогда у вас есть проблема с known_hostsфайлом
Jeb

0

РЕШЕНИЕ:

1 - удалите из "$ HOME / .ssh / known_hosts" строку, ссылающуюся на хост, к которому невозможно подключиться.

2- выполните эту команду: ssh-keygen -R "IP_ADDRESSorHOSTNAME" (замените "IP_ADDRESSorHOSTNAME" на ваш IP-адрес назначения или имя хоста назначения)

3. Повторите попытку подключения ssh (если оно не установлено, проверьте разрешение на каталог .ssh, оно должно быть 700).


0

Мое решение на UBUNTU (Linux):

1.Вы должны удалить содержимое из файла "known_hosts", который находится в "/home/YOUR_USERNAME/.ssh/known_hosts"

2.Создайте новый ключ ssh, например «ssh-keygen -t rsa -C» your.email@example.com «-b 4096»

3. Скопируйте и вставьте новый ssh-ключ в ваш git-репозиторий (в моем случае это gitlab) SSH-ключей.

Меня устраивает !


-1

AWS EC2.

Найдите IP-адрес в сообщении, которое он вам дает.

запустить

vim /home/ec2-user/.ssh/known_hosts

Используйте клавиши со стрелками, чтобы найти IP из сообщения и нажмите.

dd

Это удалит эту строку, затем запустит escape

:wp

Это спасет, тогда вы готовы.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.