Ключ хоста SSH неожиданно меняется
Я выкатил новый /etc/ssh/sshd_config
с Puppet на тестовом сервере Ubuntu 12.04. Конфиг был точно таким же, как и предыдущий, за исключением того, что была удалена следующая строка:
HostKey /etc/ssh/ssh_host_ecdsa_key
Я заметил, что получаю много похожих, но меняющихся ошибок при попытке подключения к коробке, начинающейся тогда, например: "Ключ хоста RSA для %hostname% изменился, а ключ для соответствующего IP-адреса %ipaddress% не изменился."
Я предположил, что это потому, что мой компьютер ранее использовал ключ ECDSA по умолчанию, и это было сейчас недоступно. Поэтому я добавил эту строку обратно sshd_config
и перезапустил SSH.
Это не решило проблему полностью, и с тех пор я сталкиваюсь с постоянными проблемами. Я смогу нормально подключиться к серверу несколько раз, может, даже несколько дней подряд. Затем внезапно я получаю ошибки, что ключ хоста изменился, и сервер перестает принимать мой открытый ключ для аутентификации.
Всегда кажется, что, как только я немного поиграюсь с ним и подключусь из другого места, я внезапно смогу снова подключиться к своему открытому ключу, и у меня больше не будет ошибки о возможном человеке в середине атака.
Я попытался восстановить все 3 ключа хоста несколько дней назад (удалил их и запустил dpkg-reconfigure openssh-server
который их возродил). Как и ожидалось, мне пришлось удалить старые ключи и принять новые, прежде чем я смог подключиться. Я думал, может быть, это было исправлено тогда, но проблема теперь вернулась.
Ничто не изменило ни один из ключей хоста в /etc/ssh/
с тех пор, как я обновил их в последний раз - так что может привести к тому, что я часто не смогу подключиться, если мой открытый ключ не будет работать, а затем в конце концов примет новый ключ и снова все начнет работать нормально?
Когда что-то не работает (когда я получаю ошибку об изменении ключа хоста, а затем сервер перестает принимать мой открытый ключ), на сервер ничего не записывается /var/log/auth.log
, Это заставляет меня думать, что, может быть, иногда это происходит с другой машиной, но я не знаю, как это возможно, поскольку запись DNS верна и всегда возвращает один и тот же IP-адрес.
1 ответ
Есть три распространенных причины, по которым вы получите это сообщение.
В грубом порядке вероятности они:
Вы сами изменили ключи хоста, но не удалили и не обновили их на своих клиентских компьютерах.
Это самая распространенная ситуация. Проверьте контрольные суммы файлов ключей и будьте абсолютно уверены, что они не изменились.Вы изменили свою конфигурацию SSH, чтобы представить (или запросить) ключ другого типа, чем раньше.
например, раньше вы хотели ключи RSA или DSA, теперь вы используете ECDSA - это "смена ключа".
Если это так, проверьте и примите новые ключи (или, если это не то, что вы хотели, отмените изменение).
(Похоже, что вы находитесь в ситуации №2. Отмените изменения, перезапустите sshd и убедитесь, что все работает так, как ожидается. Если вы нигде не приняли новые ключи, отмена изменения должна устранить ошибку.)Кто-то делает что-то противное
Атака "Человек посередине" SSH предупреждает вас о том, что поднял свою уродливую голову. Кто-то активно пытается перехватить ваше общение, чтобы украсть ваш закрытый ключ или сделать что-то еще, что вы почти наверняка не захотите, чтобы он делал.
Если вы убрали 1 и уверены, что не сделали 2, вам следует принять 3, пока вы не докажете обратное. Это означает, что не войти в систему. - Вся безопасность SSH в мире не помогает, когда пользователи игнорируют большой гигантский предупреждающий баннер и передают свои ключи злоумышленникам.
Исследуйте канал между вами и вашим сервером, проверяйте журналы соединений сервера (с заведомо исправного терминала), пока вы пытаетесь войти, и т. Д. - здесь так много способов выполнить атаку, что я не могу перечислить все возможные контрмеры и стратегии обнаружения, но у ребят из IT Security наверняка есть некоторые идеи.
Если возможно / для тестирования / отладки:
- используйте IP-адреса вместо имен хостов (просто чтобы убедиться)
- Есть ли в сети несколько компьютеров с одинаковым IP-адресом (DHCP дал IP-адрес, который использовался другим хостом с фиксированным IP-адресом)?
- если машины используют DHCP, их IP-адреса могут меняться в случайное время (порядок загрузки и т. д.), возможно, вы сейчас пытаетесь подключиться к другому хосту - включите аутентификацию пароля и посмотрите, где вы находитесь.
- на клиенте cat /home/username/.ssh/known_hosts ищет строки с дублирующимися ключами, но разными ips / hostnames
например:
192.168.56.3 ecdsa-sha2-nistp256 AAAAE2...fPfFAyoGSVAvs=
192.168.56.4 ecdsa-sha2-nistp256 AAAAE2...fPfFAyoGSVAvs=