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

218

Можно ли удалить конкретный ключ хоста из файла 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.
    
задан theTuxRacer 10.01.2011 в 06:56
источник

6 ответов

381

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

ssh-keygen -R hostname
    
ответ дан Takkat 10.01.2011 в 08:43
источник
25

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

    
ответ дан Mike Scott 10.01.2011 в 07:00
14

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

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

vim ~/.ssh/known_hosts

и нажмите

dd

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

    
ответ дан percent20 10.01.2011 в 07:01
2

Использование ssh-keygen -R hostname не всегда будет работать. Если у вас есть более новая версия SSH, которая «скрывает» имена хостов, чтобы предотвратить захват ssh-agent, очевидно, что 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
    
ответ дан dragon788 24.03.2015 в 23:24
1

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

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

Я получил эту битку волшебства

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

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

    
ответ дан Corvus B 20.02.2014 в 01:37
0
sed '/10\.20\.120\.211/d' ~/.ssh/known_hosts > temp && mv temp ~/.ssh/known_hosts

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

    
ответ дан Shan Valleru 20.02.2014 в 02:32