Копирование ключей SSH с одного сервера на другой

12

У меня есть сервер (допустим, его ip будет abcd), который позволяет пользователям входить через ssh. Теперь я хочу изменить физическую машину, оставив IP-адрес прежним. Так что новый компьютер все еще доступен для пользователя, подобного этому

$ ssh abcd

Проблема в том, что каждый раз, когда один пользователь пытается войти в систему, он получает следующую ошибку несоответствия ssh-ключа.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@
@ ПРЕДУПРЕЖДЕНИЕ: ДИСТАНЦИОННАЯ ИДЕНТИФИКАЦИЯ ХОЗЯИНА ИЗМЕНИЛАСЬ! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@
ВОЗМОЖНО, ЧТО-ТО ЧТО-ТО ДЕЛАЕТ!
Кто-то может подслушивать вас прямо сейчас (атака «человек посередине»)!
Также возможно, что ключ хоста RSA был только что изменен.
Отпечаток ключа RSA, отправленный удаленным хостом,
02: DC: с6: 18: 1b: 34: b7: 1d: а: 90: AB: е1: 95: 48: 69: 84.
Пожалуйста, обратитесь к системному администратору.
Добавьте правильный ключ хоста в /home/user/.ssh/known_hosts, чтобы избавиться от этого сообщения.
Оскорбительный ключ в /home/user/.ssh/known_hosts:37
Ключ хоста RSA для выпускников изменился, и вы запросили строгую проверку.
Ошибка проверки ключа хоста.

Я знаю, что пользователь может удалить строку # 37 из файла ~ / .ssh / known_hosts, и в следующий раз он получит приглашение да / нет. Я хочу, чтобы пользователь не знал о замене всей машины и просто запрашивал пароль.

Как это сделать?

Сувик Пал
источник
3
Знаете ли вы, что это лишит вас sshединственной защиты от атак посредников и может привести к тому, что вы отправите пароль прямо злоумышленнику, а не на предполагаемую машину? Если вы точно не знаете, что вы неуязвимы для активных атак (например, вы находитесь в той же защищенной внутренней сети, что и целевой компьютер), это разрушает sshмодель безопасности.
Дэвид Шварц
Да. Обе машины находятся в одной внутренней сети. Даже пользователи находятся внутри одной внутренней сети. Учитывая эту ситуацию, каковы мои варианты?
Souvik Pal
Этого не достаточно. Они должны быть в одной защищенной внутренней сети. То есть они должны абсолютно на 100% доверять тому, что ни одно устройство не подключено к этой внутренней сети, которая не на 100% защищена, и они должны на 100% доверять всем, кто контролирует эти устройства или может подключить устройство к этой сети. Другими словами, практически в любом реалистичном сценарии это плохая идея.
Дэвид Шварц
2
Это совершенно разумная вещь. Я реплицирую ключи сервера ssh на другой сервер для HA, поэтому при входе в систему я получаю эти ошибки. Кроме того, я получаю по электронной почте о сбое.
Мэтт H
3
Я согласен с Мэттом. Если вы контролируете обе машины и, следовательно, являетесь владельцем ключей, перемещение ключа хоста с одной машины на другую, находящуюся под вашим контролем, НЕ является человеком в середине атаки или риска. Если подключающийся пользователь доверяет вашему ключу хоста, это не должно иметь значения.
Росс

Ответы:

14

Как упомянул Ethabell , вы можете скопировать текущие ключи хоста на новый сервер.

Вы можете найти ключи своего хоста, открыв свой sshd_configфайл (на моем Ubuntu 12.04 его /etc/ssh/sshd_config). В конфигурационном файле ищите HostKeyзаписи. Эти записи скажут вам, где находятся файлы ключей хоста. Вы должны быть в состоянии скопировать эти файлы на новый сервер и обновить новые серверы, sshd_configчтобы они указывали на скопированные ключи (или просто перезаписывали файлы, которые уже существуют на новом сервере).

Также обратите внимание на этот раздел со sshd_configстраницы руководства, в частности, часть о разрешениях:

Указывает файл, содержащий закрытый ключ хоста, используемый SSH. По умолчанию используется /etc/ssh/ssh_host_keyпротокол версии 1 и /etc/ssh/ssh_host_dsa_key, /etc/ssh/ssh_host_ecdsa_keyа также /etc/ssh/ssh_host_rsa_keyпротокол версии 2. Обратите внимание, что sshd (8) откажется использовать файл, если он доступен для группы или мира. Можно иметь несколько файлов ключей хоста. Ключи «rsa1» используются для версии 1, а «dsa», «ecdsa» или «rsa» используются для версии 2 протокола SSH.

heavyd
источник
1

Если бы у вас был оригинальный ключ хоста, вы могли бы восстановить его, и это остановило бы ошибку.

Или вы можете отключить StrictHostKeyChecking в вашем конфигурационном файле sshd.

... Делать это, однако, ужасная, ужасная идея. Если у вас есть способ просто запустить ssh-keygen -R server.example.comна клиентских машинах, это будет наилучшим способом, потому что отключение проверки ключа хоста похоже на высказывание: «Эй. Нападите на меня». Когда все меняется, мне становится неясным, но безопасность должна быть приоритетом № 1, а не скрывать изменения.

Ethabelle
источник
Можете ли вы рассказать, как восстановить ключи хоста на новой машине?
Souvik Pal
1

Вы можете попробовать это так

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> .ssh/authorized_keys && echo "Key copied"' 

Обратите внимание, что если папка .ssh еще не существует, приведенная выше команда не будет выполнена. Кроме того, может быть лучше при создании файла установить минимально возможное разрешение (в основном чтение-запись только для владельца). Вот более продвинутая команда:

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys && echo "Key copied"'

Для получения дополнительной информации об этой проблеме вы должны перейти на этот сайт: SSH Host Key Change Error

Говинд Карамта
источник