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

Отключить строгую проверку ключей ssh

Каждый пользователь создает и уничтожает более 15 виртуальных машин в день. Виртуальные машины создаются во внутреннем облаке OpenStack компании.

Каждый раз, когда новой виртуальной машине назначается ранее выданный IP-адрес, пользователь получает ужасную ошибку проверки ключа хоста. Это связано с тем, что ключ ssh не соответствует IP-адресу в пользователях known_hosts файл.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
xxxxxxxxxxx
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending key in /home/user/.ssh/known_hosts:4
RSA host key for domain.com has changed and you have requested strict checking.
Host key verification failed.

Я вижу два решения:

Есть ли способ предотвратить появление этого сообщения об ошибке, оставаясь в безопасности? возможно отключить проверку безопасности только для определенной подсети?

Отличная особенность HostKeyAlias решает вашу проблему:

ssh -o HostKeyAlias=hostkeyalias__vm_2013-05-11_07 user@host

создает запись hostkeyalias__vm_2013-05-11_07 (без IP) в known_hosts. Конечно, вы можете написать сценарий или функцию оболочки, которая устанавливает это значение перед каждым вызовом ssh. Или вы используете переменную оболочки:

HOSTKEYALIAS=hostkeyalias__vm_2013-05-11_07
ssh -o HostKeyAlias=$HOSTKEYALIAS user@host

и изменить $HOSTKEYALIAS всякий раз, когда изменяется виртуальная машина. Время от времени старые записи следует удалять из known_hosts.

Создайте ~/.ssh/config с содержанием:

Host *
    StrictHostKeyChecking no

Кроме того, вы можете создать псевдоним для ssh, чтобы:

ssh -o StrictHostKeyChecking=no

Проблема в том, что ssh предполагает соответствие 1: 1 между IP-адресами и хостами. Нам нужно сломать это отображение только для IP-адресов ваших облачных серверов.

Решение

Добавьте следующую строфу в свой ~/.ssh/config файл.

# Disable HostKey checking for servers which frequently change keys
Host 172.16.24.32  172.16.24.33  172.16.24.34
    UserKnownHostsFile /dev/null
    StrictHostKeyChecking no

Просто измените IP-адреса, и все готово.

Необязательно: альтернатива для диапазонов IP-адресов

Если вы хотите применить это к сетевому блоку, например 192.168 / 16, вы можете использовать такие подстановочные знаки:

# Do not keep HostKeys for internal networks.
Host 10.*.*.*  192.168.*.*
    UserKnownHostsFile /dev/null
    StrictHostKeyChecking no

Необязательно: использование имен хостов

В исходном вопросе упоминались IP-адреса, но вы, конечно, можете использовать вместо них имена хостов. Например, это будет соответствовать ssh instance32.vm.yoyodyne.com:

Host *.vm.yoyodyne.com
    UserKnownHostsFile /dev/null
    StrictHostKeyChecking no

Если вы хотите использовать и имена хостов, и IP-адреса, вам необходимо явно указать оба, поскольку SSH не совпадает с решено Айпи адрес. Например, если у вас есть ssh ourvm.local как ярлык для ssh 192.168.1.53:

Host 192.168.1.53  ourvm.local
    UserKnownHostsFile /dev/null
    StrictHostKeyChecking no

Предостережение

Будьте осторожны при обходе sshмодель безопасности России. В частности, дважды проверьте, что ваши подстановочные знаки не соответствуют подлинным серверам, чьи HostKeys не будут меняться.


¹ Почему / dev / null? Я бросаю данные KnownHosts в битовое ведро, потому что только установка StrictHostChecking no удаляет предупреждение, но по-прежнему отказывается подключаться. Это глупо, поэтому я предполагаю, что OpenSSH в конечном итоге изменит поведение или добавит новый параметр. Если и когда появится лучшее решение, я обновлю этот ответ.

Вы можете получить новый ключ хоста из консоли виртуальной машины и обновить файл известных хостов после загрузки экземпляра.