• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

Статья также доступна на украинском (перейти к просмотру).

Что такое файл know_hosts и как с ним работать

Оглавление

Вопросы безопасной работы в сети, в частности, усовершенствования защиты при аутентификации на сервере Linux актуальны. Использование файла know_hosts для фиксации параметров безопасности удаленных серверов для их дальнейшей идентификации является одним из следующих путей. Рассмотрим основные характеристики файла, правила использования и продемонстрируем работу с ним на конкретных примерах.

Вопросы безопасной аутентификации на сервере

В настоящее время соединение и работа с удаленным сервером в основном происходят с использованием шифрованных соединений и каналов, которые снабжаются известным протоколом SSH (Secure Shell), в частности, его OpenSSH реализацией. Этот протокол является заменой устаревших аналогов типа RSH, FTP, Telnet и других, в которых не используются методы шифрования при соединении и передаче данных и поэтому они опасны для использования. SSH устраняет проблему с безопасностью типа «человек посередине», когда злоумышленник, может иметь доступ к промежуточной сети, может перехватить ваши данные и вместо них «подсунуть» свои – зараженные вирусом. Вообще же, вариантов манипуляций с данными здесь может быть множество, если вы работаете через посредство незащищенного протокола.

Безопасность канала SSH обеспечивается не только непосредственно методами или алгоритмами шифрования данных, но и различными подходами, связанными с использованием ключей. Одним из таких подходов является верификация удаленных хостов, к которым вы подключаетесь.

Сама идея такой верификации не нова, поскольку уже давно используется верификация веб-узлов в защищенном варианте протокола HTTP, то есть у HTTPS с методами шифрования типа SSL или TLS. Это позволяет избежать многих проблем при работе в веб-пространстве. Фактически, SSH использует тот же принцип верификации хостов, что и в указанном выше протоколе, только с некоторыми отличиями. В частности, в процессе верификации здесь отсутствует третья доверенная Certificate Authority сторона, такая как Thawte или Verisign в случае HTTPS, подтверждающая подлинность и подписавшая открытый ключ. Вместо нее такой стороной выступает сам пользователь, который может проверить открытый ключ удаленного сервера и удостоверить его идентичность. Достаточно сделать это только раз, поскольку SSH в автоматическом режиме сохранит открытый ключ удаленного хоста во время первого сеанса соединения, причем не только в пользовательском файле $HOME/.ssh/know_hosts, но и в системном файле /etc/ssh/known_hosts, что обеспечит в дальнейшем автоматическое подключение к удаленному хосту без каких-либо запросов к пользователю. Только в этом случае канал будет защищен на всех уровнях.

Практическое использование файла know_hosts

Для полноценной работы с know_hosts необходимо обеспечить наличие обновленной версии протокола SSH на вашей станции. Для этого запустим из терминала группу команд.

$ apt update

Проверка наличия обновлений пакетов.

$ apt list --upgradable

Установка обновлений пакетов.

$ apt install ssh
$ apt install openssh-server

Установка протокола SSH

Демонстрация работы с know_hosts

Просмотрим содержимое файла know_hosts с помощью соответствующей команды:

$ cat ~/.ssh/known_hosts

Просмотр файла know_hosts

Теперь попробуем установить соединение с одним из удаленных хостов и после завершения сеанса снова проверим содержимое указанного файла. Введем в терминале:

$ ssh ukrobyava.com.ua

Соединение с удаленным хостом

Выходом команды будет сообщение о том, что аутентификация не может быть установлена для указанного адреса удаленного хоста, выведен отпечаток открытого ключа и предложено выбрать один из вариантов: продолжить соединение, отказаться или ввести соответствующий отпечаток ключа. Выбираем первый вариант и подтверждаем выбор. В результате, как показано ниже, появляется сообщение о том, что запись для хоста ukrobyava.com.ua в формате ECDSA будет добавлена в список файла know_hosts и соединение закрывается. Очевидно, автоматическая верификация хоста именно поэтому и не произошла, что отсутствовала соответствующая запись в файле know_hosts. Ниже мы проверим этот тезис.

Добавление хоста в список файла know_hosts

Теперь снова проверим содержимое файла know_hosts, чтобы убедиться, что новая запись появилась. Введем команду:

$ cat ~/.ssh/known_hosts

Просмотр know_hosts

Из изображения видно, что новая запись действительно появилась (последняя в списке). В нем можно увидеть открытый ключ удаленного хоста, начинающийся с символа «А», а заканчивающийся знаком уравнения «=». После этого попытаемся снова подключиться к тому же хосту. Введем в терминале:

$ ssh ukrobyava.com.ua

Успешное соединение с удалённым хостом.

В результате нам будет предложено ввести пароль доступа для SSH соединения с удаленным хостом. Это означает, что верификация указанного хоста теперь будет происходить автоматически. Это стало возможным именно благодаря записи в файле know_hosts, то есть наш тезис подтвердился. Конечно, после ввода существующего пароля соединение будет установлено.

Использование утилиты ssh-keyscan

Для формирования списков открытых ключей удаленных машин для know_hosts используется утилита ssh-keyscan с соответствующими параметрами. Воспользуемся ею для добавления записи для определенного хоста:

$ ssh-keyscan -t rsa kievobyava.kiev.ua >> ~/.ssh/known_hosts

Добавление записи в список об удалённом хосте.

Как видим, выход команды содержит информацию о версии протокола SSH и операционной системе (ОС) хоста, то есть команда сработала. Проверим содержимое know_hosts:

$ cat ~/.ssh/known_hosts

Простомтр mnow_hosts после добавления в список удалнного хоста.

Из содержимого файла видно, что запись о хосте «kievobyava.kiev.ua» с rsa кодированием добавлена, то есть команда работает.

Использование утилиты ssh-keygen

Для управления, генерирования и конвертации ключей проверки подлинности машин можно воспользоваться возможностями утилиты ssh-keygen, которая имеет большой набор соответствующих параметров. Указанная утилита способна обеспечить формирование ключей, как для ssh(1), так и для более современной версии протокола – ssh(2). Если утилита используется без параметров, формируется ключ типа RSA.

К примеру, воспользуемся утилитой для поиска и получения оттиска ключа хоста kievobyava.kiev.ua:

$ ssh-keygen -F kievobyava.kiev.ua

Поиск и получение оттиска ключа от хоста.

Мы видим, что утилита успешно выполнила задачу и нашла нужную информацию в файле know_hosts.

Для перегруженных систем иногда бывает очень важно не только оперативно найти, но и удалить запись о том или ином хосте. Это можно сделать с помощью параметра R указанной утилиты. Например, удачным запись об одном из добавленных нами хостов.

Введем в терминале:

ssh-keygen -R ukrobyava.com.ua

Посик и удаление хоста из списка.

С выхода команды видим, что запись была удалена и помещена в файл .ssh/know_hosts.old на случай необходимости его обновления.

На всякий случай проверим содержимое know_hosts, чтобы убедиться, что это действительно так.

Введем:

$ cat ~/.ssh/known_hosts

проверка что запись о хосте удалена

Да, действительно, запись о хосте «ukrobyava.com.ua» была удалена.

Проблемы при работе с know_hosts

Наиболее распространенная проблема использования файла заключается в том, что не всегда ключ, предоставляющий удаленный сервер, совпадает с ключом, который уже записан в файле для этого сервера. Чаще это связано с обновлением оборудования или изменением настроек на сервере. При этом может быть выдано сообщение, типа «REMOTE HOST IDENTIFICATION HAS CHANGED!». В этом случае можно попытаться удалить из файла запись для этого сервера и добавить его снова. Вероятнее всего, проблема исчезнет, ??поскольку информация о ключах обновится и станет актуальной.

Возможна также ситуация, когда при попытке подключения к несуществующему хосту вы увидите сообщение типа «POSSIBLE DNS SPOOFING DETECTED!». Должны соответствующим образом реагировать. Желательно проверить запись о хосте на соответствие реалиям, в частности, поле IP-адреса.

Управление реакцией системы и процессом верификации хостов

Вообще же возможности SSH позволяют управлять реакцией системы в случае несоответствия ключа. Для этого существует параметр StrictHostKeyChecking, находящийся в файле конфигурации ssh_config. Он может принимать три значения: no, ask и yes.

В первом варианте (no) соединение устанавливается в любом случае без запроса к пользователю. При этом ключ автоматически добавляется в список хостов.

Во втором варианте (ask) если отсутствует ключ удаленного хоста, то в терминале будет выведен его отпечаток и предложено подтвердить. Если будет установлено соединение, но ключи не совпадут, то вход в систему будет приостановлен и выдано сообщение REMOTE HOST IDENTIFICATION HAS CHANGED!, о чем мы уже говорили выше. Это значение параметра установлено по умолчанию.

Третий вариант (yes) самый безопасный, поскольку вы вообще не сможете войти в систему, если в списке хостов сервер отсутствует. Однако, если ключ найден, но он не совпадает, то получите то же сообщение, что и для второго варианта.

Лучше всего управлять процессом верификации удаленных хостов с помощью системного файла /etc/ssh/known_hosts, что позволит установить одинаковый и достоверный список хостов для всех без исключения пользователей системы и быстро обновлять файл в случае изменения конфигурации системы. Следует также убедиться, что вы получили все типы ключей: rsa, dsa, rsa1 и другие.

Предлагаем Вам воспользоваться нашими услугами по аренде серверного оборудования. Предоставление настройки сервера в течение 24 часов, бесперебойное питание, качественный интернет, поддержка 24/7.

Подписывайтесь на наш телеграмм-канал https://t.me/freehostua, чтобы быть в курсе новых полезных материалов. Смотрите наш канал Youtube на https://www.youtube.com/freehostua.

Мы в чем ошиблись, или что-то упустили?

Напишите Об этом в комментариях, мы с удовольствием ответим и обсуждим Ваши замечания и предложения.

Дата: 05.11.2022
Автор: Евгений
Голосование

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
navigate
go
exit
Спасибо, что выбираете FREEhost.UA