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

Вопрос или проблема

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

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

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

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

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

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

Есть ключ ssh-keygen (-R) для этого. Используйте так:

$ ssh-keygen -R example.com
# Хост example.com найден: строка 109
/home/username/.ssh/known_hosts обновлен.
Исходное содержимое сохранено как /home/username/.ssh/known_hosts.old

man ssh-keygen читает:

-R hostname

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

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

rm -f .ssh/known_hosts

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

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

ssh-keygen -R "hostname"

Или сообщение ssh “человек посередине” должно указать, какая строка файла known_hosts содержит проблемный отпечаток. Отредактируйте файл, перейдите к этой строке и удалите ее.

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

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

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

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

    ssh-keygen -R example.com
    
  • Сложная команда для удаления ключа ssh, например, если вы подключаетесь к ssh на нестандартном порту 222:

    ssh example.com -p 222
    

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

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

Обратите внимание, что, вероятно, будет запись IP для того же хоста, так что вам также нужно будет удалить ее.

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

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

Вот пример:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       ПРЕДУПРЕЖДЕНИЕ: ВОЗМОЖНАЯ ПОДМЕНА DNS!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
RSA-ключ хоста для foo-bar.net изменился,
а ключ для соответствующего IP-адреса 127.0.0.1
остался прежним. Это может означать, что
происходит ПОДМЕНА DNS или IP-адрес хоста
и его ключ хоста изменились одновременно.
Проблемный ключ для IP в /home/user/.ssh/known_hosts:6
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    ПРЕДУПРЕЖДЕНИЕ: ИДЕНТИФИКАЦИЯ УДАЛЕННОГО ХОСТА ИЗМЕНИЛАСЬ!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ВОЗМОЖНО, ЧТО КТО-ТО ДЕЛАЕТ ЧТО-ТО НЕКОРРЕКТНО!

Видите ли вы часть /home/user/.ssh/known_hosts:6? Она указывает файл и номер строки.

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

Например:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [email protected]

Для удобства вы можете создать псевдоним для этого:

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

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

Вот метод, использующий редактор Ex:

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

где 6 – это ваш номер строки, упомянутый в предупреждающем сообщении. Например:

Проблемный ключ для IP в /home/user/.ssh/known_hosts:6 <== НОМЕР СТРОКИ


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

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

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

#! /usr/bin/env ruby
line = ARGV[0] || raise("укажите строку для удаления")
hosts = File.expand_path("~/.ssh/known_hosts")
content = File.readlines(hosts)
removed = content.delete_at line.to_i - 1
puts "Удалено:\n#{removed}"
File.open(hosts, 'w'){|f| f.write content * ""}

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

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

Ответ или решение

Удаление ключа из known_hosts: Полное руководство для IT-специалистов

Работа с виртуальными машинами может привести к подмене ключей SSH и, как следствие, к предупреждениям о возможной атаке «человек посередине» (Man-in-the-Middle). Это часто происходит, когда виртуальные машины переиспользуют IP-адреса и ключи SSH, которые уже были зарегистрированы в вашем файле .ssh/known_hosts. В этом руководстве мы подробно рассмотрим, как правильно удалить старый ключ, чтобы избежать таких предупреждений.

Структура файла known_hosts

Файл .ssh/known_hosts представляет собой текстовый документ, в который SSH-клиент записывает ключи, соответствующие удалённым хостам. В каждом ряду находится публичный ключ хоста, а также информация о его имени или IP-адресе. Если вы видите предупреждение о смене ключа, это может означать, что изменился ключ на стороне сервера или вы подключаетесь к другому серверу, который использует тот же IP.

Способы удаления ключа

  1. Использование команды ssh-keygen

    Самый простой и безопасный способ удалить ключ из файла known_hosts – воспользоваться встроенной командой ssh-keygen:

    ssh-keygen -R имя_хоста

    Например, чтобы удалить ключ для example.com, выполните:

    ssh-keygen -R example.com

    Если вы используете IP-адрес, команда будет выглядеть следующим образом:

    ssh-keygen -R 192.168.1.1

    Этот метод автоматически обновит файл known_hosts, сохранив оригинальное содержимое в .known_hosts.old.

  2. Редактирование файла вручную

    Если вы знаете номер строки, где хранится проблемный ключ, его можно удалить вручную. Предупреждение, возникающее при подключении, обычно указывает на строку, содержащую ошибочный ключ, например:

    Offending key for IP in /home/user/.ssh/known_hosts:6

    В данном случае следует открыть файл в текстовом редакторе (например, vim или nano) и удалить соответствующую строку.

    Для быстрого удаления определённой строки из терминала можно использовать команду sed:

    sed -i '6d' ~/.ssh/known_hosts
  3. Удаление всех ключей с хоста

    Если вы хотите удалить все записи, связанные с хостом, можно удалить сам файл known_hosts, хотя это и не рекомендуется, так как приведёт к потере других ключей. В таком случае используйте:

    rm -f ~/.ssh/known_hosts

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

  4. Сложные случаи: нестандартные порты

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

    ssh-keygen -R [example.com]:222
  5. Использование Ex редактора

    Кроме того, можно использовать ex, чтобы редактировать файл без необходимости в текстовом редакторе:

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

    Здесь 6 – это номер строки, которую нужно удалить.

Заключение

Правильное управление файлами known_hosts — это важный аспект обеспечения безопасности в SSH-соединениях. Понимание различных методов удаления ключей позволит вам избежать уведомлений о возможных атаках и поддерживать чистоту в файлах конфигурации SSH. Используйте описанные выше методы для удаления старых записей, и уверенно работайте с вашими виртуальными машинами и удалёнными серверами.

Оцените материал
Добавить комментарий

Капча загружается...