Можно ли удалить определенный ключ хоста из файла 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:1
RSA host key for foo.com has changed and you have requested strict checking.
Host key verification failed.
313
задан 30 May 2014 в 05:38

8 ответов

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

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

vim ~/.ssh/known_hosts

и нажмите

dd

, затем сохраните его.

0
ответ дан 30 May 2014 в 05:38

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

ssh-keygen -R hostname
0
ответ дан 30 May 2014 в 05:38

Вы можете избежать удаления конкретного хоста, обновив его:

ssh-keyscan -t ecdsa hostname >> ~/.ssh/known_hosts

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

0
ответ дан 30 May 2014 в 05:38

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

0
ответ дан 30 May 2014 в 05:38
sed '/10\.20\.120\.211/d' ~/.ssh/known_hosts > temp && mv temp ~/.ssh/known_hosts

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

0
ответ дан 30 May 2014 в 05:38

Используя ssh-keygen-R имя хоста будет не всегда работать. Если у Вас есть более новая версия 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
3
ответ дан 30 May 2014 в 05:38

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

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

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

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

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

0
ответ дан 30 May 2014 в 05:38

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

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

1
ответ дан 2 May 2020 в 04:06

Другие вопросы по тегам:

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