Як видалити сувору перевірку ключа RSA в SSH і в чому тут проблема?


42

У мене є сервер Linux, який кожного разу, коли я його підключаю, показує мені повідомлення, яке змінило ключ хоста SSH:

$ ssh root @ host1 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@ @ ПОПЕРЕДЖЕННЯ: ВИДАЛЕНО ІДЕНТИФІКАЦІЯ ХОСТА ЗМІНЕНА! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ МОЖЛИВО, ЩО НЕКОМИ РОБИТИ НЕЩО НАСТИ! Хтось міг би підслухати вас прямо зараз (атака "посередник")! Також можливо, що щойно змінено хост-ключ RSA. Відбиток для ключа RSA, який надсилає віддалений хост, становить 93: a2: 1b: 1c: 5f: 3e: 68: 47: bf: 79: 56: 52: f0: ec: 03: 6b. Зверніться до системного адміністратора. Додайте правильний ключ хоста в /home/emerson/.ssh/known_hosts, щоб позбутися цього повідомлення. Ключ порушень у /home/emerson/.ssh/known_hosts:377

Ключ хоста RSA для host1 змінився, і ви вимагали суворої перевірки. Помилка перевірки ключа хоста.

Він утримує мене протягом декількох секунд увійти до системи, а потім закриває з'єднання.

host1: ~ / .ssh # Прочитати з віддаленого хоста хост1: Скидання з'єднання за допомогою однорангового Підключення до хоста1 закрите.

Хтось знає, що відбувається і що я міг би зробити для вирішення цієї проблеми?


1
Це попереднє запитання: serverfault.com/questions/2988/…
Дрю Стівенс

Відповіді:


68

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

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

sed -i 377d ~/.ssh/known_hosts

Цей d виводить рядок 377, як показано після двокрапки в попередженні:

/home/emerson/.ssh/known_hosts:377

Ви також можете видалити відповідний ключ, виконавши наступне

ssh-keygen -R 127.0.0.1 (obviously replace with the server's IP)

Будь ласка, НЕ очищайте весь файл і переконайтесь, що це фактично машина, до якої ви хочете підключитися до очищення конкретного ключа.


Не збирається видаляти понад 350 серверів через одну невідповідність ключів. Будь-яка ідея, чому він продовжує закривати з'єднання?
setatakahashi

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

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

Я дотримувався вашої пропозиції, але $ sed -i "46 d" ~ / .ssh / known_hosts sed: 1: "/Users/myusr/.ssh ...": додаткові символи в кінці команди l, тому я видалив її вручну за допомогою vim, і це спрацювало. Дякую!
Луїс Рамірес-Монтероса

3
Синтаксис Адама майже правильний, але вам потрібно пробіл між "377" і "d". Також в OS X відомі хости розташовані в ~ / .ssh / known_hosts; відзначте відсутність знака "." у назві файлу.
ktappe

27

Я думаю, хоча деякі відповіді тут стосуються рекомендованого курсу дій у питанні ОП, але він не відповідає повністю на питання.

Питання зазначає "Як видалити сувору перевірку ключа RSA в SSH і в чому тут проблема?"

Проблема тут полягає, як радить деякі інші, зміна хоста, ймовірно, через перевстановлення сервера (найпоширеніший сценарій). І рекомендоване рішення - це дійсно видалити ключ-образник із файлу .ssh / pooblasti_keys із вбудованим sed.

Однак я не бачив жодної відповіді, яка стосується конкретної частини питання " Як видалити сувору перевірку ключа RSA в SSH ".

Ви можете видалити StrictHostKey перевірку в файлі конфігурації SSH, як правило , зберігаються в ~/.ssh/config.

Нижче наведено приклад блоку хостів:

Host 101
  HostName yourip|hostname
  User youruserid
  IdentityFile /path/to/keyfile
  Port 22
  StrictHostKeyChecking no

Спеціально доданий рядок - це останній, StrictHostKeyChecking noякий робить саме те, що. Залежно від конкретного сценарію, це може бути корисним для вас, наприклад, запуск декількох віртуалізованих контейнерів на виділеному сервері всього за кілька ips, зупинка та запуск іншого примірника на тому ж ip.


3
+1 Оскільки ця публікація дійсно стосується суворої частини перевірки повідомлення про помилку.
Шибумі

1
+1 від мене також для вирішення змісту питання. Залежно від факторів може бути ще багато чого зробити. Цей підхід погіршує перевірку хоста від "суворого" до "деякого" (моя термінологія). У моїй ситуації, що залишила ssh з дозволу не дозволяти мені входити, тому що спосіб, яким я хотів увійти, полягав у введенні пароля, і це було відключено "деяким" хостом. Тож вам доведеться йти вперед і направляти ssh, щоб використовувати / dev / null як "UserKknownHostsFile". Це встановлює перевірку хоста на "ні" в дійсності, і вказані вище ЗАПЕРЕДЖЕННЯ ДРУГО, тому не продовжуйте робити це глобально або постійно.
Космос Кардіфф людина

Це дійсно елегантне рішення. Дякую, що поділились!
LeOn - Хан Лі,

10

Ще один спосіб видалити StrictHostKeyChecking, коли це потрібно зробити лише для одного сервера:

ssh <server> -o StrictHostKeyChecking=no

Дозволяє вам увійти, але не виправить проблему назавжди.
Андрес Канелла

Коли я це роблю, це дає мені можливість додати ключ, який потім вирішує проблему назавжди
Грег Даггерті,

Можливо, у нас різне питання? Я підключаюсь до сервера, у якого раніше був інший IP.
Андрес Канелла

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

Я думаю, що насправді є гарною практикою зберігати StrictHostKeyChecking, встановлену на YES у вашому конфігурації, і використовувати цей перемикач лише тоді, коли ви знаєте, що підключаєтесь до нового сервера або змінили ключі на старому сервері.
мохак

5

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

По-друге, підніміть налагодження ssh,

ssh -vvv user@host

і подивіться, що це вам скаже, також спробуйте заглянути / var / log / secure та / var / log / messages на сервері, до якого ви намагаєтесь підключитися, для ключів, sshd дає хороші повідомлення про помилки.

По-третє, чи підключена ця машина до Інтернету? Чи дійсно ви повинні дозволити кореневі логіни?


1
+1 для коментаря з кореневими входами
Fahad Sadah

Все, що потрібно для виникнення цієї помилки, - це цільова машина, яка переробляється. Якщо ви підключаєтесь до цілі, яка стоїть на вашій стороні DMZ, атака MitM є малоймовірною.
ktappe

3

Ви отримуєте це через те, що щось змінилося (наприклад, новий NIC, новий IP, зміна серверного програмного забезпечення тощо). У фокусі безпеки є приємна стаття про захист хост-ключів SSH .

Просто видаліть ключ (за допомогою SFTP або подібного) з сервера, відредагувавши $HOME/.ssh/known_hostsфайл, і прийміть новий при наступному з'єднанні.

Можливо, ваше з'єднання буде відхилено через налаштування StrictHostKeyChecking. Дивіться цю тему для подібного випуску.


2
Нуоу, будь ласка, не роби цього. Це повністю втрачає всю безпеку, яку ця функція забезпечує. Видаліть лише певний ключ, який змінився, не всі відомі_хости.
Адам Гіббінс

5
Я не рекомендував видаляти відомий файл_hosts, я рекомендував його відредагувати та видалити з нього ключ.

Ой, вибачте, непрочитано.
Адам Гіббінс

2
Це повідомлення, безумовно, не може бути ініційовано новою IP-адресою, а тим більше новим NIC. Дивіться правильну відповідь Адама Гіббінса.
борцмейєр

1
Перш ніж ви проголосуєте проти (я вважаю, що люди дуже викликають задоволення від цього), проведіть дослідження. Прочитайте цю статтю „Фокус безпеки” , securityfocus.com/infocus/1806 . Я цитую його трохи: "Чому ключ хоста може змінитися? Машина, до якої ви хочете підключитися, була перенесена на інше DNS-ім'я або IP-адресу, або її повністю замінила нова". Якщо відповідь жахливо невірна, надайте шанс на виправлення. Зрештою, це вікі.

3

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

Не потрібно вимикати сувору перевірку, не можна також видаляти оптові видалення збережених ключів.

Цілком можливо мати два різних ключі, вказані у відомих_хостях для певного імені хоста чи IP-адреси; даючи вам два варіанти відповідно до того, чи вважаєте ви, що вам може знадобитися "старий" ключ, який наразі зберігається у відомих_хостях

Або видаліть конкретний ключ, на який він посилається, в l377 відомих_хостів для ОП, або збережіть обидва

Найпростіший спосіб зберегти обидва, уникаючи видалення ключів у відомих_хостях, - це

  1. Відредагуйте відомі_хости, щоб тимчасово додати номер # на початку "старого" запису, на який посилається у відомому_хості [@ l377]
  2. Підключіть [ssh до хоста], погодьтесь із запитом, щоб додати новий ключ "автоматично"
  3. Потім відредагуйте відомі_хости, щоб видалити #

додаткові відповіді на "Додати правильний ключ хоста у відомих_хостях" / кілька ключових ключів ssh на ім'я хоста?


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