Я развернул новый /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
Есть три распространенных причины, по которым вы могли бы получить это сообщение.
В грубом порядке вероятности они таковы:
Вы сами изменили ключи хоста и не очистили или не обновили их на клиентских машинах.
Это наиболее распространенная ситуация. Проверьте контрольную сумму файлов ключей и будьте АБСОЛЮТНО УВЕРЕНЫ, что они не изменились.Вы изменили конфигурацию SSH, чтобы предоставить (или запросить) другой тип ключа, чем раньше.
Например, вы ранее хотели ключи RSA или DSA, а теперь используете ECDSA — это «изменение ключа».
Если это так, проверьте и примите новые ключи (или, если это не то, что вы хотели, отмените изменение).
(Похоже, вы в ситуации № 2 — отмените изменения, перезапустите sshd и проверьте, что все работает так, как ожидалось. Если вы нигде не приняли новые ключи, отмена изменения должна устранить ошибку.)КТО-ТО ДЕЛАЕТ ЧТО-ТО МЕРЗКОЕ
Атака 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=