¿Hay una manera fácil de actualizar la información en conocido_hosts cuando sabe que una clave de host ha cambiado?

38

Si el sistema operativo de un host se ha vuelto a instalar y se ha regenerado su clave pública, por supuesto, fallará porque la nueva clave no coincide con la anterior.

¿Hay alguna manera más fácil de decirle a ssh que sabe que la clave del host ha cambiado y que desea que se actualice? Creo que parece un poco propenso a errores usar un editor de texto o algo así como eliminar la línea ofensiva.

Sam
fuente
Esto duplica una pregunta sobre superusuario . Vea la información más detallada allí.
Yitz

Respuestas:

59

Úselo ssh-keygen -R hostnamepara eliminar el nombre de host de su archivo known_hosts. La próxima vez que se conecte, la nueva clave de host se agregará a su archivo conocido_hosts.

jsbillings
fuente
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

La próxima vez que se conecte, se conectará sin que se le solicite, Are you sure you want to continue connecting (yes/no)?ya que las claves ya estarán en el known_hostsarchivo.

Earl Ruby
fuente
1
vea también StrictHostKeyChecking en ~ / .ssh / config
Jeff Schaller
2
Usaría un nombre de variable diferente ... HOST está en algunos shells que le dan su propio nombre de host, por lo que prefiero no alterarlo (sé que uno puede salir o hacer esto desde un subshell, pero aún así , ¿por qué no en su thehostlugar? o algo así. una variable ALLCAPS podría colisionar con un nombre interno reservado. Los nombres en minúscula no deberían.)
Olivier Dulac
Estas claves en conocido_hosts están precedidas por algunas cosas que comienzan con | 1 |. Ese material no se agrega al archivo a través de este método, ¿o me equivoco? ¿Cuál es la diferencia entonces, porque lo que devuelve ssh-keyscan no comienza con | 1 |
Daniel F
1
(@ DanielF +) si utiliza el formato hash y aceptado la clave (s) en sshque hay entradas separadas para el nombre de host y su dirección (es), por lo que debe ssh-keygen -R cada uno de ellos para evitar el conflicto
dave_thompson_085