2009-08-26 16:00:30 +0000 2009-08-26 16:00:30 +0000
140
140

Quitar la llave de known_hosts

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

En el archivo .ssh/known_hosts, sin embargo, no encuentro el registro relacionado con la IP, sólo dos extrañas cadenas de teclas y “ssh-rsa”.

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

Respuestas (11)

139
139
139
2009-08-26 16:11:22 +0000

La solución más simple es:

rm -f .ssh/known_hosts

ssh recreará el archivo de nuevo, pero perderá la comprobación de claves para otros hosts!

O, puede usar:

ssh-keygen -R "hostname"

O el mensaje ssh “man-in-the-middle” debe indicar qué línea del archivo de hosts conocidos tiene la huella dactilar ofensiva. Edita el archivo, salta a esa línea y bórrala.

91
91
91
2010-07-02 17:56:38 +0000
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 con poder de openssh, mientras que tu administrador habitual de Linux haría mejor en mantener sus habilidades sed frescas usando el método anterior.

89
89
89
2013-02-22 18:41:50 +0000

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

man ssh-keygen dice:

-R hostname

Elimina todas las claves pertenecientes a hostname de un archivo known_hosts. Esta opción es útil para eliminar los hosts de hash (ver la opción -H arriba).

18
18
18
2009-08-26 16:17:33 +0000

La advertencia le dirá 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!

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

11
11
11
2016-05-28 09:28:08 +0000

Necesitas ejecutar el siguiente comando para deshacerte de este problema. Abra la terminal y escriba el siguiente comando:

Para todos los ejemplos de abajo sólo 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
8
8
2014-03-12 16:05:22 +0000

También puedes ordenar a ssh que no compruebe el archivo known_hosts usando las banderas UserKnownHostsFile y StrictHostKeyChecking.

Por ejemplo:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@example.com

Para facilitar el uso puedes usar el alias:

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

Ahora puedes simplemente boldssh siempre que estés seguro de que confías en el certificado del servidor.

4
4
4
2018-05-16 08:03:38 +0000

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

  • Comando para eliminar la firma del host SSH simple:

  • Comando para eliminar la clave ssh compleja, por ejemplo, te conectas a ssh en el puerto no estándar 222:

y recibes una advertencia, y para eliminar esto, necesitas usar los corchetes dos puntos del número de puerto:

ssh-keygen -R [example.com]:222

Espero que esto ayude a los usuarios de configuraciones no estándar.

1
1
1
2019-10-09 16:59:56 +0000

Aquí hay un método usando el editor Ex:

ex +6d -scwq ~/.ssh/known_hosts

donde el 6º es su número de línea mencionado en el mensaje de advertencia. Como este:

Clave de infracción para la IP en /home/user/. ssh/known_hosts:6 \ <== NUMERO DE LINEA


En general, se aconseja usar ex para editar los archivos de forma no interactiva , en lugar de sed, que es más un S tream ED itor y su parámetro -i que es una extensión no estándar de FreeBSD.

0
0
0
2010-06-22 16:32:09 +0000

También puedes eliminar una sola línea de los anfitriones 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 * ""}

Guarda esto como rmknownhost en una carpeta de tu PATH.

0
0
0
2009-08-26 16:13:25 +0000

La entrada para el nombre del anfitrión o ip debe estar en la primera columna. La advertencia también debe listar un número de línea donde se encuentra la clave de la infracción.

0
0
0
2014-06-27 13:23:54 +0000

Es un archivo de texto. Puedes editarlo fácilmente con vi(m) y simplemente borrar 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.