Отключите строгую проверку ключей 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.
Я вижу два решения:
- Отключить строгую проверку - (Риск безопасности)
- Пользователи бегут
ssh-keygen -R
ipAddress
- (пользователи устают от этого решения, с тех пор сталкиваются с ним несколько раз в день)
Есть ли способ предотвратить это сообщение об ошибке, но при этом оставаться в безопасности? возможно отключить проверку безопасности только для определенной подсети?
4 ответа
Отличная особенность 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
предполагает сопоставление 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 не соответствует разрешенному IP-адресу. Например, если у вас есть 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 в конечном итоге изменит поведение или добавит новую опцию. Если и когда придет лучшее решение, я обновлю этот ответ.
Создайте ~/.ssh/config
с содержанием:
Host *
StrictHostKeyChecking no
Кроме того, вы можете создать псевдоним для SSH:
ssh -o StrictHostKeyChecking=no
Вы можете получить новый ключ хоста из консоли VM и обновить файл известных хостов после загрузки экземпляра.