it-swarm.xyz

Удалить ключ из известных_хостов

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

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

У кого-нибудь есть идеи о том, как удалить старый ключ из known_hosts?

128
Adam Matan
sed -i '6d' ~/.ssh/known_hosts

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

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

83
mikewaters

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

rm -f .ssh/known_hosts

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

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

ssh-keygen -R "hostname"

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

111
Sean Staats

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

man ssh-keygen читает:

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

70
user201564

В предупреждении будет указана точная строка в известном файле 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? Он определяет файл и номер строки.

18
innaM

Вы также можете указать 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, когда вы уверены, что доверяете сертификату сервера.

8
rouble

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

Для всех приведенных ниже примеров просто замените значение после -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
8
Tarun Gupta

Вы также можете удалить одну строку из известных хостов, например, с помощью 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.

2
grosser

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

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

ssh some.Host.name -p 222

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

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

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

0
Arunas Bartisius

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

0
stimms

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

0
Ryan Griggs