Назад | Перейти на главную страницу

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

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

HostKey /etc/ssh/ssh_host_ecdsa_key

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

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

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

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

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

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

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

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

  1. Вы сами изменили ключи хоста и не очистили и не обновили их на своих клиентских машинах.
    Это самая частая ситуация. Просуммируйте ключевые файлы и ОБЯЗАТЕЛЬНО, они не изменились.

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

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


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

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

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

  • используйте 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=