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

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, чтобы мне не всегда приходилось редактировать его самому?

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

Host *
  [ global settings .. ]

Host very.dynamic.host
  CheckHostIP no

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

CheckHostIP no

CheckHostIP по умолчанию «да». Это делает именно такую ​​проверку, которую вы терпите неудачей. Выключение этого параметра означает, что он просто доверяет тому, что IP-адрес является переменным, и будет выполнять проверку ключей по имени хоста.

Многие ответы здесь будут работать, но технически это обходные пути. 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 ; Меня особенно впечатлил ответ user1953828, хотя я вижу, что у него не так много голосов (пока). :)

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

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

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

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

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

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

Я не добавляю отпечатки пальцев на свои 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 доступным только для чтения.