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

22

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

coneybeare
источник

Ответы:

20

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

CheckHostIP no

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

sysadmin1138
источник
2
Это отключает функцию безопасности для всех серверов, к которым вы когда-либо будете подключаться, что является крайне плохой практикой. Вместо этого вы должны использовать эту опцию только для определенного хоста, который, как вы знаете, будет иметь эту проблему - или использовать опцию HostKeyAlias ​​- снова для конкретного хоста.
zaTricky
@zaTricky "Чрезвычайно плохая практика"? Что такого экстремального в этом хм? Я думаю, что это примерно так же безопасно, это просто индивидуальные предпочтения. Вы просто прикрепляете ключ к имени хоста (вместо IP). Для https HPKP работает аналогично, и все говорят, что он либо защищен, либо чрезмерно защищен.
kubanczyk
@kubanczyk Это говорит о том, чтобы сделать его глобальным параметром - никаких советов относительно указания хоста, на которые я указал
zaTricky
25

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

Host *
  [ global settings .. ]

Host very.dynamic.host
  CheckHostIP no
Коос ван ден Хаут
источник
5
Это лучший вариант, чтобы уменьшить влияние безопасности на отключение проверки IP.
Espo
3

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

zaTricky
источник
Это показывает, насколько ценным является ответ в тот же день для SO по сравнению с правильным ответом, на который ответили 8 лет спустя.
четность 3
2

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

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

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

ssh remoteServerName -l username -o "CheckHostIP=no"
Zv_oDD
источник
Если ваш сервер так часто меняет ключи хоста, вам следует подумать о настройке подписи ключей хоста
Кэмерон Таклинд,
1

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

hayalci
источник
1

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

Стивен Понедельник
источник
0

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

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

подключиться к ним. Он не спросит вас, хотите ли вы добавить машину «в список известных хостов». Замените 10.0.0.5IP-адресом вашей машины и 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за собой команды типа для машин, где я проверял отпечатки пальцев.

HBAR
источник
Это имеет смысл для серверов , которые вы только когда - либо подключить один раз - но есть более эффективные способы , чтобы избавиться от устаревших записей - и вы не должны быть , что касается о том , как запачкать known_hosts файл. Вероятно, вы потратили гораздо больше времени и энергии на создание этого псевдонима, чем на ценность, которую принес вам этот псевдоним.
zaTricky
-2

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

Eldelshell
источник
Это нарушает функциональность, когда прагматичные варианты легко доступны. : - /
zaTricky