Замечательная функция 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
Вы можете получить новый ключ хоста из консоли виртуальной машины и обновить известные 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-адреса, и все готово.
Если вы хотите применить это к сетевому блоку, например 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 в конечном итоге изменит поведение или добавит новый параметр. Если и когда появится лучшее решение, я обновлю этот ответ.