Пытаясь подключиться к компьютеру, которым я управляю, я получаю знакомое сообщение:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
[...].
Please contact your system administrator.
Add correct host key in /home/sward/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/sward/.ssh/known_hosts:86
RSA host key for [...] has changed and you have requested strict checking.
Host key verification failed.
Я действительно изменил ключ. И я прочитал несколько десятков сообщений о том, что решить эту проблему можно, удалив старый ключ из known_hosts
файла.
Но я хотел бы, чтобы ssh принимал и старый ключ, и новый ключ. Язык в сообщении об ошибке (" Add correct host key
") предполагает, что должен быть какой-то способ добавить правильный ключ хоста, не удаляя старый.
Я не смог выяснить, как добавить новый ключ хоста, не удаляя старый.
Возможно ли это, или сообщение об ошибке просто вводит в заблуждение?
Ответы:
получите ключ rsa вашего сервера, где
server_ip
находится IP-адрес вашего сервера, например192.168.2.1
:Пример ответа:
и на клиенте скопируйте всю строку ответа
server_ip ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwH5EXZG...
и добавьте этот ключ в конец~/.ssh/known_hosts
файла:источник
ssh-keyscan -t rsa1,dsa,rsa,ecdsa,ed25519 server_ip
- но единственная причина , чтобы найтиrsa1
иdsa
ключи, чтобы определить серверы , которые должны быть обновлены / переконфигурироватьУдалите эту запись из known_hosts, используя:
Это удалит проблемный IP-адрес или имя хоста из файла known_hosts и попытается подключиться снова.
Из справочных страниц:
источник
Очень простой способ:
Затем отредактируйте known_hosts, чтобы очистить исходный ключ, затем выполните ssh для хоста, используя:
Это добавит новый ключ автоматически; затем сравните два файла. Такая программа, как meld, - хороший способ сравнить два файла. Затем объедините файлы, чтобы в known_hosts содержались оба ключа.
Моя «причина» сохранения двух ключей заключается в том, что система назначения является мультизагрузочной, хотя я осмелюсь сказать, что есть способ синхронизации ключей между установками, кажется более простым разрешить использование нескольких ключей.
РЕДАКТИРОВАТЬ 2015/06
Я должен добавить, возвращаясь к нему сейчас, что я заметил еще более простой способ [до тех пор, пока запись является идентифицируемой, обычно по имени хоста / IP-адресу, не считая сообщения об ошибке, ссылающегося на его конкретное местоположение];
Есть даже опция HostKeyAlias, как в
затем, после того, как клиент ssh добавит новый ключ под псевдонимом, вы можете либо отредактировать known_hosts, чтобы заменить псевдоним «реальным» именем хоста / IP-адресом, либо подключиться к этому воплощению этого хоста с опцией псевдонима
источник
У меня та же проблема с raspberry pi, который я загружаю с нескольких разных систем (система разработки для компиляции исполняемых файлов arm, project, xbmc и т. Д.) И столкнулся с той же проблемой. Они используют DHCP в локальной сети, и мой маршрутизатор всегда использовал один и тот же IP-адрес, поскольку MAC-адрес был одинаковым. Я решил это, используя разные доменные имена в моем файле hosts:
Файл known_hosts сохраняет отпечатки пальцев по имени хоста, поэтому, даже если это один и тот же IP-адрес, каждое уникальное имя хоста получает различную запись.
Мне надоело добавлять имена в файлы хостов каждый раз, когда я использовал новую систему, поэтому я придумал еще более ленивый способ, используя начальные нули на IP-адресах, например:
Каждый вариант (неканонизированного) IP-адреса получает свою собственную запись в known_hosts.
источник
CheckHostIP no
в ,~/.ssh/config
чтобы иметь возможность по- прежнему использовать лазейку. Вы даже можете определить свои псевдонимы там, так что вам не придется возиться/etc/hosts
и определятьCheckHostIP no
только для этих 3 имен хостов.Если ваш клиент и сервер имеют OpenSSH 6.8 или новее, вы можете использовать эту
UpdateHostKeys yes
опцию в вашемssh_config
или~/.ssh/config
. Например:Это заставляет SSH хранить все ключи хоста, необходимые серверу
known_hosts
, и когда сервер меняет или удаляет один ключ хоста, ключ также изменяется или удаляется в вашемknown_hosts
.источник
Я не понимаю, почему вы хотите работать с двумя ключами, но вы, безусловно, можете добавить более одного действительного ключа в
~/.ssh/known_hosts
файл, но вам придется сделать это вручную.Другое решение может заключаться в использовании
StrictHostKeyChecking=no
опции для этого конкретного хоста:который вы могли бы поместить в псевдоним в вашем
~/.profile
или что-то подобное.источник
Если вы только SSH в локальной сети, то ...
Простое решение - стереть старый файл ключа и заменить его пустым. Это позволит вам повторно авторизовать все ваши соединения с новыми ключами. Если у вас есть ключи ssh, хранящиеся для сайтов за пределами вашей локальной сети, вам необходимо убедиться, что ваше первоначальное соединение безопасно, как вы это делали при первом подключении к этому серверу.
например
Затем нажмите пробел, backspace cntl + x и 'y', чтобы сохранить новый буфер (файл). Это плохая практика, но все в порядке, если вы не регулярно используете ssh'ы за пределами вашей локальной сети (например, универа или рабочего сервера).
В безопасной локальной сети это безопасно, потому что вы просто не можете получить человека в середине атаки.
Всегда лучше использовать код, который вы понимаете!
источник
known_hosts
файла каждый раз сводит на нет большую часть безопасности, в противном случае предоставляемую ssh.Так много ответов, но так много, которые отказываются от защиты, полностью отключая строгую проверку хоста, или уничтожая несвязанную информацию о хосте, или просто принуждают пользователя интерактивно принимать ключи, возможно, на более позднем этапе, когда это неожиданно.
Вот простой метод, позволяющий оставить строгую проверку хоста, но обновлять ключ контролируемым образом, когда вы ожидаете, что он изменится:
Удалите старый ключ и обновите его одной командой
Повторите с IP-адресом (ами) или другими именами хостов, если вы их используете.
Преимущество этого подхода состоит в том, что он перезагружает сервер ровно один раз. Большинство версий ssh-keygen, по-видимому, не возвращают ошибку, если сервер, который вы пытаетесь удалить, не существует в известном файле hosts, если это проблема для вас, используйте две команды по очереди.
Этот подход также проверяет подключение и выдает хорошее сообщение для журналов в команде ssh (которая входит в систему, обновляет ключ хоста и выводит обновленный ключ хоста SSH , а затем немедленно завершает работу.
Если ваша версия ssh-keygen возвращает ненулевой код выхода, и вы предпочитаете обрабатывать это без ошибок, независимо от того, установлено ли ранее или ранее, просто используйте две команды последовательно, игнорируя любые ошибки в команде ssh-keygen.
Если вы используете эту технику, вам никогда не придется изменять команду ssh или отключать проверку хоста, кроме как во время этой одной команды ssh. Вы можете быть уверены, что будущие сеансы ssh будут работать без конфликтов или необходимости явно принимать новый ключ, если приведенная выше команда ssh выполняется без ошибок.
источник
У меня такая же проблема.
Все, что я сделал, это
sudo nano /home/user/.ssh/ host_allow
стер ключ.Когда я вернулся на сервер, он добавил новый ключ.
источник
Используйте команду sed, чтобы удалить поврежденную строку
Удалите строку 86, как указано в известных хостах.
В следующий раз при доступе через ssh система автоматически добавит новый ключ.
более новые версии ssh
использовать:
Это удалит запись имени хоста и примет резервную копию старого
.known_host
какknown_hosts.old
источник