Вопрос: Удалить ключ из known_hosts


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

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

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


109
2017-08-26 16:00


Источник


«Причудливые ключевые строки», на которые вы ссылаетесь, - это хешированные хосты / IP-адреса. Это функция безопасности, которая помогает помешать злоумышленнику узнать, к каким системам вы имеете доступ. Если вы видите это, то ваш ssh_config имеет HashKnownHosts yesзадавать. - Deebster
Если вы считаете, что содержимое файла слишком сбивает с толку, у вас, вероятно, активирована строка. Отключите его. Все строки начинаются с имени хоста или IP-адреса. - Daniel B


Ответы:


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

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

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


76
2017-07-02 17:56



Я не думаю, что это хороший совет для редактирования файла конфигурации вручную, если у вас есть официальное приложение для этого. Взятие рисков не делает вас профессионалом, поиск самого быстрого и безопасного варианта. Это похоже на то, чтобы люди говорили и редактировали /etc/sudoers без visudo, Если вы хотите sed навыки, продолжайте и делайте это, не испортив свою систему. - kraxor
«если у вас есть официальное заявление для этого» => оба ssh-keygen -R а также sed -i {line}d являются довольно «официальными», и обе они будут работать в обозримом будущем. Util ssh-keygen позволяет удалить номер строки, оба являются совершенно приемлемыми (потому что номера строк часто легче обрабатывать и меньше подвергать ошибкам, чем иметь дело с современными именами хостов центра обработки данных). - michael
A) Удаление конкретно 6-й линии - это все «не выглядят руками». Никаких объяснений вообще относительно того, что важно в 6-й строке файла ?! Б) Кроме man ssh-keygen упоминает ssh-keygen -R hostname  вы только что сказали ssh-keygen -R без указания имени хоста, и вы не объяснили, что вы подразумеваете под этим. - barlop


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

rm -f .ssh/known_hosts

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

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

ssh-keygen -R "hostname"

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


88
2017-08-26 16:11



ssh-keygen -R hostname тоже будет работать. - grawity
Если мы удалим этот файл, другие ключи тоже удалятся. - shgnInc
Удаление файла является плохим советом, это как сказать кому-то купить новый компьютер, потому что у старого есть сломанная мышь. Вручную редактирование файла, который может быть отредактирован официальным приложением, также является плохой идеей. ssh-keygen опция была добавлена ​​из-за комментария, но без объяснений. Я не думаю, что этот ответ заслуживает столько же возвышений. - kraxor
-1 из-за целого «удалить весь файл known_hosts» первые строки. Это ужасная, страшная, страшная вещь, которую можно предложить, и ее нужно отредактировать. - Olivier Dulac
Это решение является излишним. Просто удалите оскорбительную строку. Вот и все. - Blake Frederick


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

man ssh-keygen читает:

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


54
2018-02-22 18:41



Это самый простой и безопасный метод. - Leo
Примечание. Это приведет к изменению разрешений файла known_hosts на 0600. Если у вас есть файл shared_hosts по какой-либо причине, это может привести к отключению его совместного использования. - Jiri Klouda


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

Вот пример:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       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 часть? Он указывает номер файла и строки.


15
2017-08-26 16:17





Вы также можете поручить 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
2018-03-12 16:05



Какая ужасная идея. Навсегда отключите уровень безопасности только потому, что вы слишком ленивы, сохраняя ~/.ssh/known_hosts своевременно? Почему бы не просто пойти и использовать telnet? «всякий раз, когда вы уверены» - если вы когда-либо уверены, то вы не знаете, что такое атака MITM, и вам, вероятно, стоит потратить некоторое время на чтение хорошей литературы. - kraxor
Основываясь на вопросе OP, я думаю, что это правильный ответ. Иногда у вас есть тестовая система, в которой вы создаете / уничтожаете множество виртуальных машин. (Я делаю это прямо сейчас, когда готовлюсь к экзамену RHCE.) Там могут не быть никаких последствий для безопасности. Отмечая, что последствия для безопасности велики, я не думаю, что это должно быть обозначено как «ужасная идея». - Rick Chatham
Связанный: superuser.com/a/1126243/73961 - michael


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

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

4
2018-05-28 09:28



Этот метод уже был предложен в предыдущих ответах. Могли бы вы рассказать о том, что отличается от вашего ответа? - Burgi
@Burgi - этот ответ дает более подробную информацию о синтаксисе ssh-keygen -Rчем любой другой ответ до сих пор. Он показывает на примере, что именно вы можете написать после -R, Поэтому этот ответ стоит того, хотя это не совсем новый ответ. - Yitz
@Yitz Мой комментарий был сделан как часть обзора. В то время (18 месяцев назад) я думал, что этот вопрос нуждается в небольшой помощи, чтобы сделать его еще лучше. - Burgi


Вы также можете удалить одну строку из известных хостов, например. 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
2018-06-22 16:32



Какая польза от этого, делая это в любом текстовом редакторе? Есть ли какая-то причина не делать этого таким образом, как то, как судоуправники должны быть отредактированы с помощью visudo? - Andy Lester
Какие дистрибутивы приходят с этим? У Ubuntu, похоже, нет. - flickerfly
Преимущество в том, что оно автоматизировано и быстро / это отдельный бинарный файл, который вы добавляете сами - grosser
Вы могли бы просто разместить свой скрипт здесь вместо того, чтобы связывать свою собственную запись в блоге, созданную вами в тот день, когда вы отправили этот ответ. Это относится к спаму IMHO. Не говоря уже о том, что вы можете создать простой псевдоним для достижения того же результата, не нужно использовать рубиновый скрипт длиной 7 строк. - kraxor


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


0
2017-08-26 16:13





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


0
2018-06-27 13:23



Я не вижу, как редактирование файла непосредственно в VIM «небезопасно». Он основан на вашем уровне комфорта с VIM. Особенно с этим файлом, самый большой риск, который у вас есть, - это удаление слишком большого количества ключей, и в этом случае вы снова получите запрос. - Rick Chatham
«Безопасность», о которой я говорил, включает в себя: 1) забывание / не знание удалить зависимую информацию в других файлах (если есть) и 2) случайное удаление большего или меньшего, чем нужно, нарушая таким образом файл. - Ryan Griggs


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

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

ssh some.host.name -p 222

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

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

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


0
2018-05-16 08:03