119

Я построил несколько виртуальных машин за последние несколько недель. Проблема в том, что .ssh/known_hosts дает мне Человека в среднем предупреждении. Это происходит потому, что с IP-адресом виртуальной машины связан другой отпечаток.

В файле .ssh/known_hosts , однако, я не нахожу записи, относящиеся к IP, только две странные, подобные ключу строки и "ssh-rsa".

У кого-нибудь есть идеи по поводу удаления старого ключа из known_hosts?

10 ответов10

103

Самое простое решение:

rm -f .ssh/known_hosts

ssh заново создаст файл, но вы потеряете проверку ключей для других хостов!

Или вы можете использовать:

ssh-keygen -R "hostname"

Или в сообщении ssh "man-in-the-middle" должно быть указано, какая строка файла known_hosts имеет неправильный отпечаток. Отредактируйте файл, перейдите к этой строке и удалите его.

81
sed -i '6d' ~/.ssh/known_hosts

Изменит файл ~/.ssh/known_hosts:6, удалив 6-ю строку.

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

63

Для этого есть переключатель ssh-keygen (-R).

man ssh-keygen читает:

-R hostname Удаляет все ключи, принадлежащие имени хоста, из файла known_hosts. Эта опция полезна для удаления хешированных хостов (см. Опцию -H выше).

17

В предупреждении будет указана точная строка в известном файле hosts.

Вот пример:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The RSA host key for foo-bar.net has changed,
and the key for the corresponding IP address 127.0.0.1
is unchanged. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
Offending key for IP in /home/user/.ssh/known_hosts:6
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

Смотрите /home/user/.ssh/known_hosts:6 часть? Он определяет файл и номер строки.

9

Вы также можете указать ssh не проверять файл known_hosts, используя флаги UserKnownHostsFile и StrictHostKeyChecking.

Например:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@example.com

Для простоты использования вы можете использовать псевдоним:

alias boldssh='ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

Теперь вы можете просто boldssh, когда вы уверены, что доверяете сертификату сервера.

5

Вам нужно выполнить следующую команду, чтобы избавиться от этой проблемы. Откройте терминал и введите следующую команду:

Для всех приведенных ниже примеров просто замените значение после -R

ssh-keygen -R server-name
ssh-keygen -R server.ip.addre.ss
ssh-keygen -R 202.54.1.5
ssh-keygen -R server1.example.com
2

Вы также можете удалить одну строку из известных хостов с помощью, например, rmknownhost 111 (111 - строка для удаления):

#! /usr/bin/env ruby
line = ARGV[0] || raise("gimme line to remove")
hosts = File.expand_path("~/.ssh/known_hosts")
content = File.readlines(hosts)
removed = content.delete_at line.to_i - 1
puts "Removed:\n#{removed}"
File.open(hosts, 'w'){|f| f.write content * ""}

Сохраните это как rmknownhost в папке из вашего PATH .

0

Все ответы хороши, но для реального SSH pro у нас отсутствует информация о том, как удалить ssh-подпись с номером порта.

Например, вы подключаетесь к

ssh some.host.name -p 222

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

ssh-keygen -R [some.host.name]:222

Надеюсь, это поможет пользователям нестандартной конфигурации.

0

Запись для имени хоста или ip должна быть в первом столбце. В предупреждении также должен быть указан номер строки, в которой находится нарушающий ключ.

0

Это текстовый файл. Вы можете легко редактировать с помощью vi(m) и просто удалить соответствующую строку (dd) и сохранить файл (wq). Но если есть специальная команда для удаления хоста, это, вероятно, самый безопасный метод.

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