it-swarm.dev

Eliminar la clave de known_hosts

Construí varias máquinas virtuales durante las últimas semanas. El problema es que el .ssh/known_hosts me da el Hombre en el medio advertencia. Esto sucede porque otra huella digital está asociada con la IP de la máquina virtual.

Sin embargo, en el archivo .ssh/known_hosts, no encuentro el registro relacionado con la IP, solo dos cadenas extrañas y con forma de clave y "ssh-rsa".

¿Alguien tiene alguna idea sobre cómo eliminar la clave anterior de known_hosts?

128
Adam Matan
sed -i '6d' ~/.ssh/known_hosts

Modificará el archivo ~/.ssh/known_hosts: 6, eliminando la 6ª línea.

En mi opinión, el uso de ssh-keygen -R es una mejor solución para un usuario avanzado de openssh, mientras que su administrador habitual de Linux haría un mejor trabajo para mantener sus habilidades básicas al usar el método anterior.

83
mikewaters

La solución más sencilla es:

rm -f .ssh/known_hosts

ssh volverá a crear el archivo de nuevo, pero perderá la comprobación de claves para otros hosts.

O bien, puede utilizar:

ssh-keygen -R "hostname"

O el mensaje ssh "man-in-the-middle" debe indicar qué línea del archivo known_hosts tiene la huella digital ofensiva. Edite el archivo, salte a esa línea y elimínelo.

111
Sean Staats

Hay un interruptor ssh-keygen (-R) para esto.

man ssh-keygen lee:

-R nombre de host Elimina todas las claves que pertenecen al nombre de host de un archivo conocido_hosts. Esta opción es útil para eliminar hosts con hash (consulte la opción -H más arriba).

70
user201564

La advertencia le indicará la línea exacta en el archivo de hosts conocidos.

Aquí hay un ejemplo:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The RSA Host key for foo-bar.net has changed,
and the key for the corresponding IP address 127.0.0.1
is unchanged. This could either mean that
DNS SPOOFING is happening or the IP address for the Host
and its Host key have changed at the same time.
Offending key for IP in /home/user/.ssh/known_hosts:6
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE Host IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

Ver la parte /home/user/.ssh/known_hosts:6? Especifica el archivo y número de línea.

18
innaM

También puede indicar a ssh que no verifique el archivo conocido_hosts usando las banderas UserKnownHostsFile y StrictHostKeyChecking.

Por ejemplo:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [email protected]

Para facilidad de uso puedes alias esto:

alias boldssh='ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

Ahora solo puede negrita cuando esté seguro de que confía en el certificado del servidor.

8
rouble

Debe ejecutar el siguiente comando para deshacerse de este problema. Abra el terminal y escriba el siguiente comando:

Para todos los ejemplos a continuación simplemente reemplace el valor después de -R

ssh-keygen -R server-name
ssh-keygen -R server.ip.addre.ss
ssh-keygen -R 202.54.1.5
ssh-keygen -R server1.example.com
8
Tarun Gupta

También puede eliminar una sola línea de hosts conocidos con, por ejemplo, rmknownhost 111 (111 es la línea a eliminar):

#! /usr/bin/env Ruby
line = ARGV[0] || raise("gimme line to remove")
hosts = File.expand_path("~/.ssh/known_hosts")
content = File.readlines(hosts)
removed = content.delete_at line.to_i - 1
puts "Removed:\n#{removed}"
File.open(hosts, 'w'){|f| f.write content * ""}

Guarde esto como rmknownhost en una carpeta de su PATH.

2
grosser

Todas las respuestas son buenas, pero para SSH pro real, nos falta información sobre cómo eliminar la firma ssh con el número de puerto.

P.ej. te conectas a

ssh some.Host.name -p 222

y recibe una advertencia, y para eliminar esto, debe usar el número de puerto de dos corchetes:

ssh-keygen -R [some.Host.name]:222

Espero que esto ayude a los usuarios de configuración no estándar.

0
Arunas Bartisius

La entrada para el nombre de host o ip debe estar en la primera columna. La advertencia también debe incluir un número de línea donde se encuentra la clave ofensiva.

0
stimms

Es un archivo de texto. Puede editar fácilmente con vi (m) y simplemente eliminar la línea en cuestión (dd) y guardar el archivo (wq). Pero si hay un comando específico para eliminar un Host, ese es probablemente el método más seguro.

0
Ryan Griggs