Можно ли удалить определенный ключ хоста из файла known_hosts SSH?

Можно ли удалить определенный ключ хоста из файла known_hosts SSH?

Обычно я заканчиваю тем, что удаляю весь known_hosts файл, с которым у меня нет проблем, но просто из любопытства, можно ли удалить только одну запись?

Я открыл known_hosts файл, но я изо всех сил пытаюсь понять его содержимое.

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

Add correct host key in /home/wissen16/.ssh/known_hosts to get rid of this message.Offending key in /home/wissen16/.ssh/known_hosts:1RSA host key for foo.com has changed and you have requested strict checking.Host key verification failed.

Используйте эту команду для удаления записей из known_hosts:

ssh-keygen -R hostname

Да, вы можете удалить только один ключ. Просто откройте его в редакторе и удалите оскорбительную строку. Число после двоеточия в сообщении об ошибке - это номер строки, так что это строка для удаления - строка 1 в вашем примере..

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

Также основываясь на этой ошибке и не имея ни малейшего представления о том, что когда-либо было, проблема может быть в первом ключе хоста в файле, поэтому откройте файл с помощью vim

vim ~/.ssh/known_hosts

и ударил

dd

тогда сохраните его.

Использование ssh-keygen -R hostname не всегда будет работать. Если у вас более новая версия SSH, которая "скрывает" имена хостов, чтобы предотвратить перехват ssh-агента, по-видимому, ssh-keygen не может отключить хэш имени хоста.

Например, у меня есть хост с именем build-node-01, и я подключился к нему и принял ключ. Затем я перестраиваю его с нуля, получаю новый отпечаток пальца хоста и пытаюсь подключиться повторно, я получу предупреждение о том, что в строке X произошел конфликт (скажем, 3). Я бегу ssh-keygen -R hostname, но в следующий раз, когда я пытаюсь подключиться, я все равно получаю предупреждение о наличии конфликта. Я проверил файл только для того, чтобы обнаружить, что имя хоста было хэшировано и отображалось как [1] Bu4Ch@R@4D0M57uFF вместо читаемого имени хоста.

В этом случае единственным способом успешно удалить хост-нарушитель было использовать

sed -i 'xd' ~/.ssh/known_hosts

Чтобы продвинуться в этом sed еще на один шаг, вы можете создать резервную копию known_hosts на случай, если вы удалите неправильную строку, в этом случае просто добавьте .bak (или любое расширение) в опцию -i, чтобы создать резервную копию с этим расширением. Использование ssh-keygen делает это автоматически.

sed -i.bak 'xd' ~/.ssh/known_hosts

Просто чтобы поделиться еще одним простым и понятным ответом, который я только что нашел. Удаление имени хоста для меня невозможно, так как файл known_hosts хэширован. Однако я МОГ бы вручную отредактировать запись хоста на основе номера строки в сообщении об ошибке. Как отмечал ранее Майк Скотт, в сообщении об ошибке указан номер строки с именем хоста-нарушителя.

Или я могу сделать это. Отсюда: как исправить неправильный ключ в файле ssh known_hosts

Я получил этот кусочек магии cli

sed -i 'xd' ~/.ssh/known_hosts

Замените крестик номером строки, и вуаля. Он также предлагает ответ на perl, если sed не будет работать.

Чтобы удалить оскорбительную запись, это

sed -i '/<ipaddr|hostname>/d' ~/.ssh/known_hosts

Я собрал нижеприведенный сценарий. Просто сохраните его как ~/.rmhost

#!/bin/bashrmhost_help(){        echo "Usage rmhost {ipaddr|hostname}"        echo "          -h      Print this help message"        exit 0}if [ -z $1 ] || [ $1 == "-h" ]; then rmhost_helpfised -i "/$1/d" ~/.ssh/known_hostsecho "host $1 removed"exit 0

Затем поместите этот псевдоним в ~/.bashrc

псевдоним rmhost=~/.rmhost

Когда вы получите сообщение об ошибке, просто введите 'rmhost {ipaddr|hostname}'

Если вы хотите удалить ключ хоста для определенного ip-адреса, то это поможет:

ssh-keygen -f "~/.ssh/known_hosts" -R "49.12.89.136"

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

ssh-keygen -f "/home/noob/.ssh/known_hosts" -R "172.16.132.132"

Просто вам нужно изменить IP-адрес и путь к файлу хоста здесь.

sed '/10\.20\.120\.211/d' ~/.ssh/known_hosts > temp && mv temp ~/.ssh/known_hosts

В этом случае 10.20.120.211 - это хост, который я хочу удалить из моего файла known_hosts, убедитесь, что вы экранируете специальные символы, такие как (.)

Если вы получаете fingerprint опция при добавлении токена rsa используйте это. Как только вы выберете fingerprint опция это добавит имя хоста хранилища хранилища в known_host