SSH в ящик с часто меняющимся IP

У меня есть несколько облачных коробок, которые часто меняют свои IP.

Я использую имя хоста ssh, но мне приходится каждый раз редактировать файл 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…

Помимо каких-либо угроз безопасности, связанных с тем, что я хочу сделать, есть ли способ игнорировать эту ошибку или автоматически перезаписать файл known_hosts, чтобы мне не всегда приходилось редактировать его самостоятельно?

8 ответов

Решение

Отредактируйте ваш файл ssh_config и добавьте изменить эту строку:

CheckHostIP no

CheckHostIP по умолчанию "да". То, что это делает, должно сделать только вид проверки, которую Вы терпите неудачу. Отключение означает, что он просто верит, что IP-адрес является переменным, и будет проверять ключи по имени хоста.

Дополнение: вы можете попробовать отключить только проверку CheckHostIP для этого имени:

Host *
  [ global settings .. ]

Host very.dynamic.host
  CheckHostIP no

Многие ответы здесь будут работать - но технически они обходные пути. OpenSSH уже имеет встроенную функцию с учетом этого: HostKeyAlias,


В вашем файле.ssh / config добавьте HostKeyAlias <alias> к конфигурации хоста:

host myserver.example.com
HostKeyAlias myserver.example.com

С этим на месте, подключение к серверу myserver.example.com не будет использовать имя хоста или IP-адрес для локальной ссылки - он всегда будет использовать только данный HostKeyAlias ​​при подключении к этому серверу. Для меня имеет смысл использовать имя хоста - но вы, конечно, можете использовать любой псевдоним, который вам нравится.


Типичные для меня конфиги для динамических хостов таковы:

host myserver
hostname myserver.dyn.example.com
HostKeyAlias myserver.private.example.com

Это также может быть использовано в некоторых непонятных сценариях, когда вы знаете, что множество ваших серверов имеют одинаковые ключи хоста (как правило, это не должно иметь место). Это тогда предотвратит повторяющиеся записи. В будущем, если ключи законно меняются, вам не нужно заменять / удалять несколько записей. Только один. Серверы Gitlab Geo являются хорошим примером этого.


Что касается очистки файла known_hosts, я бы посоветовал рассмотреть другие вопросы / ответы, конкретно относящиеся к ведению / удалению устаревших записей known_hosts. Например, см. Как управлять моим файлом.ssh / known_hosts; Я особенно впечатлен ответом пользователя 1953828, хотя я вижу, что у него не так много голосов (пока).:)

Я использую эти хитрые варианты, чтобы обойти эту проблему. (Открытый ключ моего хоста регенерируется довольно часто., Так что это удаляет проверку IP и ключа)

ssh remoteServerName -l username -o "UserKnownHostsFile=/dev/null"

Вы также можете просто использовать это, если Ключ остается тем же, но IP изменяется:

ssh remoteServerName -l username -o "CheckHostIP=no"

Вы могли бы поставить CheckHostIP no в ваш ~/.ssh/config файл, но это оставляет вас открытым для подмены атак. Если вас это не беспокоит, тогда этот параметр должен отключить known_hosts проверять.

Вы можете установить StrictHostKeyChecking=no в своей конфигурации клиента ssh (т. Е. Файл ~/ssh/config на компьютере, к которому вы подключаетесь), чтобы игнорировать предупреждение.

Я не добавляю отпечатки пальцев к своему known_hosts файл при подключении к переходным машинам AWS. Я использую такую ​​команду как

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i secret.pem ec2-user@10.0.0.5

подключиться к ним. Он не спросит вас, хотите ли вы добавить машину "в список известных хостов". Замените 10.0.0.5 по IP-адресу вашей машины и secret.pem по полному пути вашего ключа Ssh. Вы все равно получите предупреждение о том, что 10.0.0.5 был добавлен, но он действительно исчез в /dev/null, Я делаю это достаточно часто, чтобы установить псевдоним в моем ~/.profile

alias awsssh='ssh -i secret.pem -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

Я резервирую ssh ec2-user@example.com Команды типа для машин, где я пошел на проверку отпечатков пальцев.

Сделайте known_hosts только для чтения.

Другие вопросы по тегам