2009-08-26 16:00:30 +0000 2009-08-26 16:00:30 +0000
140
140

Удалить ключ из known_hosts

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

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

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

Ответы (11)

139
139
139
2009-08-26 16:11:22 +0000

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

rm -f .ssh/known_hosts

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

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

ssh-keygen -R "hostname"

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

91
91
91
2010-07-02 17:56:38 +0000
sed -i '6d' ~/.ssh/known_hosts

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

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

89
89
89
2013-02-22 18:41:50 +0000

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

man ssh-keygen читает:

-R hostname

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

18
18
18
2009-08-26 16:17:33 +0000

Предупреждение скажет вам точную строку в файле известных хостов.

Вот пример:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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!

See the /home/user/.ssh/known_hosts:6 part? В ней указывается файл и номер строки.

11
11
11
2016-05-28 09:28:08 +0000

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

Для всех приведенных ниже примеров просто замените значение после -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
8
8
2014-03-12 16:05:22 +0000

Вы также можете инструктировать 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'

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

4
4
4
2018-05-16 08:03:38 +0000

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

  • Простая команда удаления подписи хоста SSH:

  • Сложное удаление ssh ключа, например, вы подключаетесь к ssh на нестандартном порту 222:

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

ssh-keygen -R [example.com]:222

Надеюсь, это поможет нестандартным пользователям настроек.

1
1
1
2019-10-09 16:59:56 +0000

Вот метод с использованием Ex-редактора:

ex +6d -scwq ~/.ssh/known_hosts

, где 6-е место - номер вашей строки, указанный в предупредительном сообщении. Например:

Ошибочный ключ для IP в /доме/пользователе/. ssh/known_hosts:6 <== LINE NUMBER

  • *

В общем, рекомендуется использовать ex для редактирования файлов неактивно , а не sed, что больше S tream ED itor и его параметр -i, который является нестандартным расширением FreeBSD.

0
0
0
2010-06-22 16:32:09 +0000

Вы также можете удалить одну строку с известных хостов, например 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
0
0
2009-08-26 16:13:25 +0000

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

0
0
0
2014-06-27 13:23:54 +0000

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

Похожие вопросы

16
19
12
16
3