Ротация ключей хоста SSH – файл known_hosts не обновлен

Вопрос или проблема

Я создал новые ключи хоста на serverA, обновил sshd_config соответственно (добавив строку ниже) и перезапустил ssh:

cd /etc/ssh
sudo ssh-keygen -f 2024_ssh_host_ed25519_key -t ed25519 -N ''

sudo vi /etc/ssh/sshd_config
# добавленная строка: HostKey /etc/ssh/2024_ssh_host_ed25519_key

sudo service ssh restart

Когда я подключаюсь к serverA (ssh -v -o UpdateHostKeys=yes serverA) позже, known_hosts на клиенте не обновляется. Вывод команды ssh содержит следующее:

debug1: Host '[serverA.domain.internal]:22' is known and matches the ED25519 host key.
# ...
debug1: client_input_hostkeys: searching /Users/snafu/.ssh/known_hosts for [serverA.domain.internal]:22 / (none)
debug1: client_input_hostkeys: searching /Users/snafu/.ssh/known_hosts2 for [serverA.domain.internal]:22 / (none)
debug1: client_input_hostkeys: hostkeys file /Users/snafu/.ssh/known_hosts2 does not exist
debug1: client_input_hostkeys: host key found matching a different name/address, skipping UserKnownHostsFile update

Старый ключи хоста очевидно присутствуют в known_hosts – но почему это должно помешать обновлению?

Если я закомментирую старые ключи хоста в /etc/ssh/sshd_config, хост предлагает только новый ключ (как и ожидалось), и клиент отказывает ему (как и ожидалось).

Ответ или решение

Ротация SSH-ключей хоста – Проблема с обновлением known_hosts

Введение

В процессе обновления SSH-ключей на сервере, иногда возникают трудности с обновлением файла known_hosts на клиенте. В данном случае, вы создали новые ключи на serverA, но файл known_hosts на клиенте не был обновлен, даже с включенной опцией UpdateHostKeys=yes. Давайте подробно разберем возможные причины этой проблемы и их решения.

Описание проблемы

Вы обновили конфигурационный файл SSH на сервере, добавив новые ключи, и перезапустили сервис SSH. После этого, при попытке подключения к serverA с клиента, вы столкнулись с ситуацией, когда старые ключи все еще присутствуют в known_hosts, и, как следствие, обновление не произошло. Вы получили следующее предупреждение в выводе команды SSH:

debug1: client_input_hostkeys: host key found matching a different name/address, skipping UserKnownHostsFile update

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

Причины проблемы

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

  2. Некорректная обработка ключей: Если при импорте нового ключа имя хоста или адрес не совпадают с записанными в known_hosts, это может стать причиной, по которой ключ не будет обновлен.

  3. Опция UpdateHostKeys: По умолчанию, UpdateHostKeys обновляет только те записи, которые соответствуют ранее зарегистрированным именам хостов. Однако, если имя хоста в файле known_hosts различается, обновление не произойдет.

Решение проблемы

Шаг 1: Удаление старых ключей

Первый шаг для устранения проблемы — это удалить старые записи из файла known_hosts на клиенте. Это можно сделать, используя команду:

ssh-keygen -R serverA

Эта команда удалит запись о старом ключе для serverA, что позволит вам повторно подключиться и обновить его.

Шаг 2: Проверка конфигурации

После удаления старых ключей, убедитесь, что конфигурация SSH на сервере обновлена. Проверьте файл /etc/ssh/sshd_config и убедитесь, что новые ключи указаны правильно:

HostKey /etc/ssh/2024_ssh_host_ed25519_key

Также убедитесь, что другие ключи, которые могут конфликтовать, закомментированы или удалены.

Шаг 3: Повторное подключение

Попробуйте снова подключиться к серверу:

ssh -v -o UpdateHostKeys=yes serverA

При успешном подключении, новый ключ должен автоматически добавиться в файл known_hosts.

Заключение

Обновление SSH-ключей хоста — важная задача для поддержания безопасности сервера. Однако она может привести к сложностям с обновлением файла known_hosts на клиентской машине. Удаление старых ключей и тщательная проверка конфигураций помогут избежать таких проблем в будущем. Поддержание актуальных ключей и конфигурации SSH критически важно для поддержания безопасности и правильной работы удаленных соединений.

Оцените материал
Добавить комментарий

Капча загружается...