8

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

$ssh a.b.c.d

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

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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
02:dc:c6:18:1b:34:b7:1d:fa:90:ab:e1:95:48:69:84.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending key in /home/user/.ssh/known_hosts:37
RSA host key for alumni has changed and you have requested strict checking.
Host key verification failed.

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

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

3 ответа3

12

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

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

Также обратите внимание на этот раздел на man-странице 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.

1

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

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

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

0

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

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 Error

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .