Найпростіший робочий процес для обробки помилок перевірки хоста SSH?


41

Це просте питання, з яким ми стикаємось і, ймовірно, вирішуємо вручну, не задумуючись.

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

Враховуючи наступне повідомлення, я зазвичай vi /root/.ssh/known_hosts +434видаляю ( dd) рядок, що порушує право.

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

Поради?

[root@xt ~]# ssh las-db1

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
ed:86:a2:c4:cd:9b:c5:7a:b1:2b:cc:42:15:76:8c:56.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:434
RSA host key for las-db1 has changed and you have requested strict checking.
Host key verification failed.

У нас така ж проблема. У мене немає досвіду роботи з Mesh ti.arc.nasa.gov/opensource/projects/mesh NASA, але він є в моєму переліку технологій для перегляду.
Ендрю Гілмартін

1
Чому б не скопіювати старий ключ при перевстановці / перерозподілі сервера?
Випадково832

@ Random832 Це не масштабує ситуацію, коли у вас багато серверів ... Або якщо у вас лабораторія / тестове середовище, де ви часто переробляєте IP-адреси. Або інший випадок; незапланована заміна сервера, де оригінальний сервер недоступний ...
ewwhite

3
Основне питання, яке у мене виникає: як ви потрапляєте в цю ситуацію? Якщо ви повторно використовуєте імена хостів, ви можете переглянути свій стандарт імен хостів ( tools.ietf.org/html/rfc1178 ). Якщо ви повторно використовуєте IP-адреси, вам слід провести виведення з експлуатації ключів ssh як частину тієї ж процедури, що і виведення з експлуатації попереднього сервера за цією IP-адресою. Якщо ви працюєте в середовищі "веб-шкали", коли повторне використання IP-адреси відбувається автоматично, а наболі безглузді імена хостів є обов'язковими, тоді у вас повинен бути достатньо автоматизований процес життєвого циклу сервера, який буде виконувати виправлення ключів ssh
Paul Gear

Відповіді:


47

Ви можете скористатися ssh-keygenкомандою для видалення конкретних записів за допомогою хоста:

ssh-keygen -R las-db1

Якщо у вас немає цієї команди, ви завжди можете використовувати sed:

sed -i '/las-db1/d' /root/.ssh/known_hosts

3
Використання ssh-keygen -R для вирішення проблеми з конфліктуючими ключами також є тим, що пропонує клієнт ssh в Ubuntu у повідомленні про помилку, коли ця проблема виникає.
Kenny Rasschaert

Мені не було відомо про цей перехід на ssh-keygenкоманду. Добре!
ewwhite

10
Не забудьте перевірити і бути впевненим, що хтось насправді не "РОБИТИ НЕЩО НАСТІ!"
Майкл Хемптон

1
Переконайтеся, що ви цього не робите на конференції!
Пол Гір

2
@ewwhite Ви заповнюєте /etc/ssh/known_hostsфайл у своїй мережі за допомогою відповідних ключів хоста (керований w / ляльковий тощо) або заповнюєте свій особистий файл ~ / .ssh / known_hosts (щоб зробити будь-який із них, ви можете перейти ssh-keyscanна відомий хороший / безпечний з'єднання). Заборона, що (і припускаючи, що ви взагалі не піклуєтесь про безпеку) встановіть UserKnownHostsFile=/dev/nullі StrictHostKeyChecking=noу своєму ~/.ssh/config file(або передайте варіанти, щоб ssh з -o)
voretaq7

25

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

Таким чином я не повинен турбуватися про їх видалення. Дев'яносто дев'ять відсотків часу, коли маріонетка бігала та оновлювала ключі для мене, оскільки в мене агенти працюють кожні тридцять хвилин. Винятки для мене дуже рідкісні, і тому я не проти швидкого редагування широко відомих системних систем, якщо я не бажаю чекати.

class ssh::hostkeys {

  @@sshkey { "${::clientcert}_rsa":
    type => rsa,
    key => $sshrsakey,
    tag => 'rsa_key',
  }

  if 'true' == $common::params::sshclient {
    Sshkey <<| tag == 'rsa_key' |>> {
      ensure => present
    }
  }

  file {'/etc/ssh/ssh_known_hosts':
    ensure => present,
    owner => 'root',
    group => 'root',
    mode => 0644,
  }

}

+1 Хороший крок для використання інструментів управління конфігурацією.
ewwhite

4

Я хотів би додати пропозицію, яка може допомогти вам у дуже конкретних випадках, коли безпека викликає менше занепокоєння.

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

Оскільки безпека не є проблемою для мене в цьому лабораторному середовищі, а ключі змінюються так часто, у моєму .ssh / config файлі є наступне:

Host lab-*
  User kenny
  IdentityFile ~/.ssh/lab_id_rsa
  StrictHostKeyChecking no
  UserKnownHostsFile=/dev/null

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

Це те, що ви повинні робити лише тоді, коли безпека вас зовсім не турбує, оскільки це ставить вас у вразливе становище для атаки чоловіка в середині.


1
Здається ризиковано. Я хотів би продовжити перевірку хосту, оскільки деякі з них є системами, що стоять перед громадськістю.
ewwhite

1
Ось чому він зазначив, що цей метод призначений лише для "тих випадків, коли безпека менше / не стосується". Приватні мережі / лабораторні середовища ідеально підходять для цієї конфігурації. Системи автоматичного масштабування / автоматизовані автоматичні масштабування, не так багато.
dannosaur

4

Відповідно до ноти випуску openssh 5.6 , вам більше не потрібно використовувати ключі хостів:

Тепер аутентифікація на основі хостів може використовувати ключі хостів сертифікатів. Ключі CA повинні бути вказані у відомому файлі_hosts, використовуючи маркер @ cert-авторитету, як описано в sshd (8).

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


2

SSHFP DNS ResourceRecord може допомогти залежно від того, наскільки ваш ssh-клієнт цим скористається. Зберігайте там усі свої відбитки відкритого ключа ssh разом із ім'ям хоста.

Заздалегідь застосуйте DNSSEC або DNS через SSL.
http://www.ietf.org/rfc/rfc4255.txt

FreeIPA.org обробляє управління хостом та користувачами, а також сертифікати PKI. Він також автоматично завантажує записи DNS SSHFP, коли створюються нові ключі.

Служба безпеки системи Daemon (SSSD) може бути налаштована для кешування та отримання ключових SSH ключів, щоб додатки та служби шукали лише в одному місці для хост-ключів. Оскільки SSSD може використовувати FreeIPA як один із своїх постачальників інформації про особу, FreeIPA забезпечує універсальне та централізоване сховище ключів. Адміністраторам не потрібно турбуватися про розповсюдження, оновлення чи перевірку ключів SSH хоста.

http://docs.fedoraproject.org/en-US/Fedora/17/html/FreeIPA_Guide/host-keys.html

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