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

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

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

$ssh abcd

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

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

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

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

решение1

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

Вы можете найти свои ключи хоста, открыв свой 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.

решение2

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

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

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

решение3

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

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

Связанный контент