Есть ли простой способ обновить информацию в known_hosts, когда вы знаете, что ключ хостов изменился?

38

Если операционная система хоста была переустановлена ​​и ей был восстановлен открытый ключ, sshing к ней, конечно, потерпит неудачу, потому что новый ключ не совпадает со старым.

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

Сэм
источник
Это дублирует вопрос о суперпользователе . Смотрите более подробную информацию там.
Иц

Ответы:

59

Используйте ssh-keygen -R hostnameдля удаления имени хоста из вашего файла known_hosts. При следующем подключении новый ключ хоста будет добавлен в ваш файл known_hosts.

jsbillings
источник
12
TARGET_HOST=[hostname or IP]

# Remove the old key(s) from known_hosts
ssh-keygen -R $TARGET_HOST

# Add the new key(s) to known_hosts (and also hash the hostname/address)
ssh-keyscan -H $TARGET_HOST >> ~/.ssh/known_hosts

При следующем подключении вы будете подключаться без запроса, Are you sure you want to continue connecting (yes/no)?так как ключи уже будут в known_hostsфайле.

Эрл Руби
источник
1
см. также StrictHostKeyChecking в ~ / .ssh / config
Джефф Шаллер
2
Я бы использовал другое имя переменной .... HOST в некоторых оболочках дает ваше собственное имя хоста, поэтому я бы предпочел не изменять его (я знаю, что можно просто выйти или сделать это из подоболочки, но все же , почему бы не thehostвзамен? или что-то. Переменная ALLCAPS может столкнуться с зарезервированным внутренним именем. Строчные имена не должны.)
Оливье Дюлак
Эти ключи в known_hosts начинаются с префикса, начинающегося с | 1 |. Этот материал не добавляется в файл с помощью этого метода, или я не прав? какая разница, потому что то, что возвращает ssh-keyscan, не начинается с | 1 |
Даниэль Ф
1
(@ DanielF +), если вы используете хешированный формат и приняли ключ (и), sshесть отдельные записи для имени хоста и его адреса (адресов), поэтому вам следует ssh-keygen -R каждый из них избегать конфликта
dave_thompson_085