Можно ли удалить определенный ключ хоста из файла 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.
Original contents retained as /Users/nha/.ssh/known_hosts.old
при условии, что она одинакова для Ubuntu).ssh-keygen -R [ssh.sssshh.com]:1234
Да, вы можете удалить только один ключ. Просто откройте его в редакторе и удалите оскорбительную строку. Число после двоеточия в сообщении об ошибке является номером строки, так что это строка для удаления - строка 1 в вашем примере ..
источник
Я только недавно начал использовать ключи хоста, но когда я их перепутал, это, как правило, по одному ключу на строку, поэтому делайте резервную копию файла и удаляйте их по одному, пока не найдете нужный. Затем добавьте остальные обратно. Это долгий путь, но он должен работать.
Также основанный на этой ошибке, и не зная, что вообще, это может быть первый ключ хоста в файле, который является проблемой, поэтому откройте файл с помощью vim
vim ~/.ssh/known_hosts
и ударил
dd
затем сохраните его.
источник
Использование ssh-keygen -R hostname не всегда будет работать. Если у вас есть более новая версия SSH, которая «скрывает» имена хостов для предотвращения перехвата ssh-agent, очевидно, ssh-keygen не сможет отменить хэширование имени хоста.
Например, у меня есть хост с именем build-node-01, и я подключился к нему и принял ключ. Затем я воссоздаю его с нуля, получаю новый отпечаток хоста и пытаюсь восстановить соединение, я получу предупреждение о конфликте в строке X (скажем, 3). Я бегу
ssh-keygen -R hostname
, но при следующей попытке подключения я получаю предупреждение о конфликте. Я проверил файл только для того, чтобы обнаружить, что имя хоста было хешировано и отображалось как[1] Bu4Ch@R@4D0M57uFF
вместо читаемого имени хоста.В этом случае единственный способ успешно удалить нарушающий хост - использовать
Чтобы сделать это на шаг дальше, вы можете сделать резервную копию known_hosts на случай, если удалите неправильную строку, в этом случае просто добавьте .bak (или любое расширение) к опции -i, чтобы создать резервную копию с этим расширение. Использование ssh-keygen делает это автоматически.
источник
ssh-keygen -R {hostname}
будет работать, даже если имена хостов скрыты (хешированы). Тем не менее, да, можно удалить запись по номеру (например, 10-я запись черезsed -i.bak 10d ~/.ssh/known_hosts
), но это обычно не требуется. Возможно, использовался нестандартный порт, и в этом случае вам может потребоваться отформатировать команду как (обратите внимание на кавычки):ssh-keygen -R '[hostname]:2222'
Просто чтобы поделиться еще одним простым и понятным ответом, который я только что нашел. Удаление имени хоста мне не подходит, так как файл known_hosts хэшируется. Тем не менее, я мог бы вручную отредактировать запись хоста на основе номера строки в сообщении об ошибке. Как уже отмечал Майк Скотт, номер строки имени хоста, который нарушил работу, указан в сообщении об ошибке.
Или я могу сделать это. Отсюда: как исправить неправильный ключ в файле ssh known_hosts
Я получил немного магии кли
Замените х на номер строки и вуаля. Он также предлагает perl-ответ, если sed не будет работать.
источник
В этом случае 10.20.120.211 - это хост, который я хочу удалить из моего файла known_hosts, убедитесь, что вы экранировали специальные символы, такие как (.)
источник
ssh-keygen -R ...
(желательно); илиsed
с конкретным номером строки для удаления. Кроме того, наsed
месте используйте-i' option; e.g.,
sed -i.bak 10d ~ / .ssh / known_hosts` для удаления 10-й строки и (необязательно) сохраните оригинал в файле резервной копии с суффиксом.bak
.Вы можете избежать удаления конкретного хоста, обновив его:
Таким образом, вам не нужно снова подключаться к хосту.
источник