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
Команды типа для машин, где я пошел на проверку отпечатков пальцев.