Ключ хоста SSH, похоже, неожиданно меняется

Ключ хоста SSH, похоже, неожиданно меняется

Я развернул новый /etc/ssh/sshd_configс Puppet на тестовом сервере Ubuntu 12.04. Конфигурация была точно такой же, как и предыдущая, за исключением того, что была удалена следующая строка:

HostKey /etc/ssh/ssh_host_ecdsa_key

Я заметил, что получаю много похожих, но разных ошибок при попытке подключения к устройству, начиная с этого момента, например: «Ключ хоста RSA для%имя_хоста%изменился, и ключ для соответствующего IP-адреса%айпи адрес% неизменен."

Я предположил, что это потому, что мой компьютер ранее использовал ключ ECDSA по умолчанию, а теперь он недоступен. Поэтому я добавил эту строку обратно sshd_configи перезапустил SSH.

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

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

Я попытался перегенерировать все 3 ключа хоста несколько дней назад (удали их и запустили, dpkg-reconfigure openssh-serverкоторый перегенерировал их). Как и ожидалось, мне пришлось удалить старые ключи и принять новые, прежде чем я смог подключиться. Я думал, что, может быть, это было исправлено тогда, но проблема вернулась.

С момента последней генерации ключей хоста ничего не менялось /etc/ssh/. Так что же может быть причиной того, что я часто не могу подключиться, мой открытый ключ не работает, а затем в конечном итоге принимаю новый ключ и все снова начинает работать нормально на какое-то время?

Когда что-то не работает (когда я получаю ошибку об изменении ключа хоста, а затем сервер перестает принимать мой открытый ключ), ничего не записывается в /var/log/auth.log. Это наводит меня на мысль, что, возможно, он иногда каким-то образом попадает на другую машину, но я тоже не знаю, как это возможно, поскольку запись DNS правильная и всегда возвращает один и тот же IP-адрес.

решение1

Есть три распространенных причины, по которым вы могли бы получить это сообщение.
В грубом порядке вероятности они таковы:

  1. Вы сами изменили ключи хоста и не очистили или не обновили их на клиентских машинах.
    Это наиболее распространенная ситуация. Проверьте контрольную сумму файлов ключей и будьте АБСОЛЮТНО УВЕРЕНЫ, что они не изменились.

  2. Вы изменили конфигурацию SSH, чтобы предоставить (или запросить) другой тип ключа, чем раньше.
    Например, вы ранее хотели ключи RSA или DSA, а теперь используете ECDSA — это «изменение ключа».
    Если это так, проверьте и примите новые ключи (или, если это не то, что вы хотели, отмените изменение).
    (Похоже, вы в ситуации № 2 — отмените изменения, перезапустите sshd и проверьте, что все работает так, как ожидалось. Если вы нигде не приняли новые ключи, отмена изменения должна устранить ошибку.)

  3. КТО-ТО ДЕЛАЕТ ЧТО-ТО МЕРЗКОЕ
    Атака Man-in-the-Middle, о которой вас предупреждает SSH, подняла свою уродливую голову. Кто-то активно пытается перехватить ваше сообщение, чтобы украсть ваш закрытый ключ или сделать что-то еще, чего вы почти наверняка не хотите, чтобы он делал.


Если вы исключили 1 и уверены, что не делали 2, вам следует предположить 3, пока вы не докажете обратное. Это означаетНе входить в систему. -- Вся безопасность SSH в мире не помогает, когда пользователи игнорируют большой предупреждающий баннер и передают свои ключи злоумышленникам.

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

решение2

если возможно/для тестирования/отладки:

  • используйте IP-адреса вместо имен хостов (просто для уверенности)
  • есть ли в сети несколько машин с одинаковым IP-адресом (DHCP выдал IP-адрес, который использовался другим хостом с фиксированным IP-адресом)?
  • Если машины используют DHCP, их IP-адреса могут меняться в случайное время (порядок загрузки и т. д.). Возможно, вы сейчас пытаетесь подключиться к другому хосту — включите аутентификацию по паролю и посмотрите, что получится.
  • на клиенте cat /home/username/.ssh/known_hosts ищите строки с дублирующимися ключами, но разными IP-адресами/именами хостов

например:

192.168.56.3 ecdsa-sha2-nistp256 AAAAE2...fPfFAyoGSVAvs=
192.168.56.4 ecdsa-sha2-nistp256 AAAAE2...fPfFAyoGSVAvs=

Связанный контент