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

Теперь это возможно и через программный центр! Перейдите в «История», и вы сможете отображать все ваши обновления и установки.

1
задан 30 May 2014 в 06:38

5 ответов

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

26
ответ дан 25 May 2018 в 23:33
  • 1
    Я понятия не имел, что он идентифицировал номер строки, это невероятно полезно. – deltree 25 February 2015 в 21:07

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

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

vim ~/.ssh/known_hosts

и нажмите

dd

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

15
ответ дан 25 May 2018 в 23:33
  • 1
    Вы можете использовать: set nu in vim для отображения номеров строк. В любом случае ответ Takkat - лучший. – Javier Rivera 10 January 2011 в 14:46
  • 2
    Я согласен, не знаю, что вы могли бы это сделать. Я собираюсь использовать его в будущем. Я имел смысл искать номера строк для vim. Благодарю. – percent20 11 January 2011 в 01:17

Использование 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
2
ответ дан 25 May 2018 в 23:33
  • 1
    Это неверно. ssh-keygen -R {hostname} будет работать, даже если имена хостов «скрыты» (хэшируются). Тем не менее, да, можно удалить запись по номеру (например, 10-я запись через sed -i.bak 10d ~/.ssh/known_hosts), но это обычно не требуется. Может случиться так, что использовался нестандартный порт, и в этом случае вам может потребоваться отформатировать команду как (примечание кавычек): ssh-keygen -R '[hostname]:2222' – michael 20 September 2016 в 12:13
  • 2
    Полезно знать @michael_n, очень вероятно, что это был нестандартный порт, который влиял на мою способность удалить запись. Я также должен отметить, что если вы приняли несколько отпечатков пальцев для хоста, я не уверен, удаляет ли он ВСЕ записи сразу или только по одному. – dragon788 20 September 2016 в 18:06

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

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

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

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

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

1
ответ дан 25 May 2018 в 23:33
sed '/10\.20\.120\.211/d' ~/.ssh/known_hosts > temp && mv temp ~/.ssh/known_hosts

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

0
ответ дан 25 May 2018 в 23:33
  • 1
    IP-адреса и amp; имена хостов больше не сохраняются в текстовом файле известных файлов (текстовый текст), поэтому это не сработает. Нужно либо использовать ssh-keygen -R ... (желательно); или sed с номером конкретной строки для удаления. Кроме того, на sed на месте, используйте -i' option; e.g., sed -i.bak 10d ~ / .ssh / known_hosts` для удаления 10-й строки и (необязательно) сохраните оригинал в файле резервной копии, суффикс которого .bak. – michael 20 September 2016 в 12:18

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

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