Использование ssh-keygen -R hostname не всегда будет работать. Если у вас есть более новая версия SSH, которая «скрывает» имена хостов, чтобы предотвратить захват ssh-agent, очевидно, что ssh-keygen не может разобрать имя хоста.
Например, у меня есть хост, называемый build-node-01, и я подключился к нему и принял ключ. Затем я перестраиваю его с нуля, получая новый отпечаток от хоста, и я пытаюсь подключиться, я получу предупреждение о конфликте в строке X (скажем, 3). Я запускаю ssh-keygen -R hostname
, но в следующий раз, когда я пытаюсь подключиться, я все равно получаю предупреждение о конфликте. Я просмотрел файл только для того, чтобы узнать, что имя хоста было хэшировано и появилось как [1] [email protected]@4D0M57uFF
вместо читаемого имени хоста.
В этом случае единственным способом успешного удаления удаляемого хоста является использование
sed -i 'xd' ~/.ssh/known_hosts
Чтобы сделать это sed еще одним шагом, вы можете сделать резервную копию known_hosts на случай, если вы удалите неправильную строку, в этом случае просто добавьте .bak (или любое расширение) в параметр -i, чтобы создать резервное копирование с этим расширением. Использование ssh-keygen делает это автоматически.
sed -i.bak 'xd' ~/.ssh/known_hosts