Вопрос или проблема
Я создал новые ключи хоста на 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-клиент обнаружил существующий ключ, но не смог его обновить из-за несовпадения с новым ключом.
Причины проблемы
-
Старые ключи: Если в файле
known_hosts
все еще находятся старые ключи дляserverA
, это может привести к конфликту. SSH-клиент ожидает, что ключи соответствуют имени хоста, однако в вашем случае они уже были зарегистрированы, и клиент не стал их обновлять из-за этого несоответствия. -
Некорректная обработка ключей: Если при импорте нового ключа имя хоста или адрес не совпадают с записанными в
known_hosts
, это может стать причиной, по которой ключ не будет обновлен. -
Опция 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 критически важно для поддержания безопасности и правильной работы удаленных соединений.