Ідентифікація віддаленого хоста ssh змінилася


619

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

[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 в коментарях нижче від adrin знаходиться тут .


1
щойно з'ясували важкий шлях, що ця проблема може трапитися також, якщо у вас конфлікт ip-адреси nslookup вашого ip, щоб налагодити цю проблему більше
sharrajesh

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

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

3
Оскільки хтось, хто хоче спочатку перевірити свій ключ, я вважав цю відповідь корисною. askubuntu.com/a/83499/620623
Declan McKenna

Як згадує sharrajesh: перевірте свої записи DNS (у FreeIPA для мене) і переконайтеся, що у вас немає декількох записів A з IP-адресами, які недоступні в мережі.
th3penguinwhisperer

Відповіді:


1071

Ось найпростіше рішення

ssh-keygen -R <host>

Наприклад,

ssh-keygen -R 192.168.3.10

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

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

Я в Windows і це рішення, а також видалення ключа не працює, що ще я можу спробувати?
jaycode

5
Добре, виявляється, у Windows мені для цього потрібно використовувати термінал від git bash (або будь-який термінал MingW32). Хитрий.
jaycode

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

4
Коли я намагаюся це, я отримую помилку "<ім'я> не знайдено в ~ / .ssh / known_hosts"
Нодеократ

3
Чому виникає таке попередження?
Вілаш Джоші

199

Використовуйте

ssh-keygen -R [hostname]

Приклад із ip-адресою / ім'ям хоста:

ssh-keygen -R 168.9.9.2

Це оновить правопорушення вашого хоста з відомих_хостів. Ви також можете надати шлях відомих_хостів прапором -f.


1
Видалення відповідного ключа $ ssh-keygen -R {server.name.com}| $ ssh-keygen -R {ssh.server.ip.address}| $ ssh-keygen -R server.example.com
DaddyMoe

5
Як відповідь без пояснень отримує стільки відгуків .. жодних проблем щодо безпеки, без пояснень .... -1
Daniel W.

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

115

У мене така ж помилка сталася після того, як я відтворив зображення цифрового океану Ubuntu. Я використовував таку команду разом із IP-сервером свого сервера замість[IP_ADDRESS]

ssh-keygen -R [IP_ADDRESS]

Дуже дякую! Я використовував ім'я хоста, і він працював лише з IP_ADDRESS :)
J. Lopes,

1
Це зробило це для мене і має бути прийнятою відповіддю. Я не знаю, чому є дві копії цієї відповіді, які з’явились пізніше, і в обох є більше відгуків.
Вілліям Джадд

Ваша помилка не була однаковою; ваш сервер не працював з SSSD. Дивіться ОП.
Меркурій00

39

Після перевстановлення сервера його особистість змінюється, і ви почнете отримувати це повідомлення. Ssh не може знати, чи змінили ви сервер, до якого він підключається, або сервер-посередник був доданий у вашу мережу, щоб нюхати всі ваші комунікації - тому це привертає вашу увагу.

Просто видаліть ключ із відомих_хостів, видаливши відповідний запис:

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

На 4dрахункуOffending RSA ...known_hosts:4


1
Дякую, але я не знаю чому, але я його прибираю, і це знову в ньому. У мене є спроби зупинити службу sssd, і цей ефект минув, але після запуску sssd він з’являється знову.
Filip Dobrovolný

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

Я перейменував .ssh в .ssh_old, після нової спроби підключити його просто створіть порожній каталог .ssh. І я досі не можу зробити / var / lib / sss / pubconf / known_hosts "редагованим".
Filip Dobrovolný

4
Більш портативний спосіб зробити це: sed -i -e 4d /var/lib/sss/pubconf/known_hosts
П'єрз

2
Як зробити резервну копію сервера identificationу випадку, якщо ви хочете відновити сервер, не викликаючи збоїв, як це повідомлення про помилку?
Ninjaxor

38

Кувалда - це видалити кожного відомого хоста одним махом:

rm ~/.ssh/known_hosts

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


Працював для мене на бродячому ВМ, коли прийнята відповідь не працювала.
100 пік

1
Корисний інструмент мати в поясі, але це може відкрити вас для нападу MitM (саме те, що known_hostsмає на меті запобігти). Робіть це лише якщо ви впевнені, що всі господарі там безпечні.
Freedom_Ben

26

Проблема полягає в тому, що ви раніше прийняли SSH-з'єднання з віддаленим комп'ютером, а цифровий відбиток пальця віддаленого комп'ютера або хеш-ключ SHA256 змінилися з моменту останнього підключення. Таким чином, коли ви знову спробуєте SSH або використовуєте github для витягування коду, який також використовує SSH, ви отримуєте помилку. Чому? Оскільки ви використовуєте ту саму адресу віддаленого комп'ютера, що і раніше, але віддалений комп'ютер відповідає на інший відбиток пальця. Тому можливо, що хтось підробляє комп’ютер, до якого раніше ви підключились. Це питання безпеки.

Якщо ви на 100% впевнені, що віддалений комп'ютер не порушений, не зламаний, підроблений і т.д., то все, що вам потрібно зробити, - це видалити запис у вашому файлі знаних_хостів для віддаленого комп'ютера. Це вирішить проблему, оскільки більше не буде розбіжностей з ідентифікаторами відбитків пальців 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 цього віддаленого комп'ютера у вашому відомому файлі_hosts. Якщо ви використовуєте SSH через порт 22, то аргумент -p не потрібен.

Будь-які проблеми, які ви можете відновити вихідний файл відомих_хостів: 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
Це працює для файлу .ssh known_hosts root. Не для / var / lib / sss / pubconf / known_hosts, який є керованим файлом SSSD та заповненим віддаленим сервером.
Меркурій00

1
у моєму випадку, чомусь проблема сталася на відомих_хостях * 2 *. Виконуючи ці кроки, я допомогла мені це дізнатися, дякую @Sahil Gulati!
Лукас

11

Я використав рішення mockinterface, хоча sed -i не дуже спрацював, я вирішив його, видаливши рядок вручну з vim:

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

Ви можете використовувати будь-який інший редактор тексту, який хочете, але, ймовірно, вам потрібно буде показати свої адміністративні права


1
Так, видалення запису одного і того ж IP-файла у відомому файлі знає_гости вирішить проблему.
wherby

Запис миттєво відтворюється SSSD при спробі повторного ssh. зауважте, що sss pubconf known_hosts - це керований файл, а не місцеве сховище, заповнене локальним сервером.
Меркурій00

9

Для користувачів Mac можна використовувати -Rпрапор ssh-keygenкоманди. Короткий приклад:

ssh-keygen -R THE_IP_ADDRESS

THE_IP_ADDRESSбудучи IP-адресою, на яку ви намагаєтеся вступити. І тоді можна добре підключити.


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
Бенджамін

Підказка. Це також видаляє всю іншу інформацію про хост. Якщо ви запускаєте автоматичні сценарії зі свого комп'ютера (наприклад, розгортання), вони можуть зламатися, оскільки вам доведеться вручну підтвердити всі хост-ключі. Просто, щоб попередити інших користувачів, які прагнуть скористатися найпростішим рішенням.
Матенг

3

Видаліть цей запис із відомих_хостів за допомогою:

ssh-keygen -R *ip_address_or_hostname*

Це видалить проблемний IP-адресу або ім'я хоста з відомого файла_hosts та спробує знову підключитися

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

-R hostname
Видаляє всі ключі, що належать імені хоста, з відомого файлу_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 до вашого сервера

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


2

Іноді, якщо з будь-якої причини вам потрібно перевстановити сервер, при підключенні через ssh ми виявимо, що ви сервер говорите, що ідентифікація змінилася. Якщо ми знаємо, що це не атака , а відновлення системи, ми можемо видалити стару ідентифікацію з відомих_хостів за допомогою 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файлом
Джеб

0

РІШЕННЯ:

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

2- виконайте цю команду: ssh-keygen -R "IP_ADDRESSorHOSTNAME" (замініть "IP_ADDRESSorHOSTNAME" на IP-адресу призначення або ім'я хоста)

3- Повторіть ssh-з'єднання (якщо воно не вдається, перевірте дозвіл у .ssh-каталозі, він повинен бути 700)


0

Моє рішення на UBUNTU (Linux):

1.Ви повинні видалити вміст з файлу "відомі_хости", який знаходиться у "/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.