¿Ignorar temporalmente mi archivo `~ / .ssh / known_hosts`?

48

¿Hay alguna manera de ignorar temporalmente mi ~/.ssh/known_hostsarchivo?

mbp:~ alexus$ ssh 10.52.11.171
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Please contact your system administrator.
Add correct host key in /Users/alexus/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/alexus/.ssh/known_hosts:155
RSA host key for 10.52.11.171 has changed and you have requested strict checking.
Host key verification failed.
mbp:~ alexus$ 

NOTA:

.. por unas pocas respuestas / comentarios me doy cuenta de que mi pregunta es un poco engañosa, tan breve es el comportamiento esperado), por lo que es normal (en mi caso) hay una razón válida detrás de por qué querer ver "ignorarlo")

alexus
fuente
99
Estás haciendo la pregunta equivocada. No debe "ignorar" el problema; debes averiguar qué está pasando y resolverlo.
Michael Hampton
99
No puedo hablar por el usuario, pero un ejemplo sería una situación en la que está desarrollando un proceso de instalación automatizado (como un arranque rápido), donde su flujo de trabajo iterativo implica construir, conectar, probar, modificar el proceso de construcción y reconstruir desde rascarse una y otra vez.
Goladus
10
@MichaelHampton: recibo esto todo el tiempo a medida que VMware y VirtualBox reciclan las direcciones IP de los invitados. Para mí, es la pregunta correcta :)
1
FWIW Sigo buscando esta respuesta porque tengo un sistema en mi LAN donde uso un dropbear (con una clave de host diferente) para ingresar la contraseña de cifrado del disco durante el inicio.
Zulan
1
@jww Esta es la pregunta / solución incorrecta para su escenario. En su lugar, debería configurar SSH para ignorar la dirección IP pero aún así verificar la clave del host. Ver por ejemplo aquí
Jon Bentley

Respuestas:

56

Puede usar ssh -o StrictHostKeyChecking=nopara desactivar la comprobación known_hostsmomentáneamente. Pero aconsejaría en contra de esto. Realmente deberías comprobar por qué la clave del host ha cambiado.

Otra opción es agregar una entrada específica ~/.ssh/configpara el host en cuestión. Este podría ser un enfoque válido si tiene un determinado host que genera nuevas claves de host cada vez que se reinicia y se reinicia por un motivo válido varias veces al día.

Host <your problematic host>
  StrictHostKeyChecking no
Sami Laine
fuente
ese es el comportamiento esperado) así que es normal (en mi caso)
alexus
1
@alexus Si es "esperado", puede aplicar la opción a un nombre de host / IP específico para el que espera que suceda.
chrylis -on strike-
1
@alexus Y recuerda que si haces esto, prácticamente perderás toda la protección que proporciona ssh. También puede estar usando telnet, ya que sería trivial para alguien MITM y capturar todo su tráfico.
Michael Hampton
1
Esto ya no funciona (al menos para OpenSSH_5.3p1)
draeath
-o StrictHostKeyChecking=noelimina la capacidad de iniciar sesión con una contraseña. ¿La falta de una bandera para esto no va directamente contra los principios de Unix de permitir que el usuario fuerce el comportamiento? Actualmente estoy intentando iniciar sesión en una máquina local con una IP local. La clave de host cambió porque reformateé dicha máquina. Todo aquí tiene sentido y nada es un riesgo de seguridad dadas las circunstancias.
Wowfunhappy
31

Para ignorar por completo su archivo de hosts conocidos en un entorno POSIX, configure las opciones GlobalKnownHostsFiley UserKnownHostsFilepara /dev/null:

ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null user@host

Configurar la StrictHostKeyChecking=noopción le permitirá conectarse, pero SSH seguirá mostrando una advertencia :

ssh -o StrictHostKeyChecking=no user@host

Como otros han señalado, probablemente sea mejor abordar el problema subyacente. Podría considerar la autenticación de certificado SSH para verificar hosts, por ejemplo.

MattB
fuente
2
Esta puede ser una mejor respuesta que la más votada actualmente, ya que permite usar la autenticación de contraseña que de otro modo se deshabilitaría (por supuesto, debe comprender qué está haciendo exactamente antes de escribir su contraseña ...)
VZ.
Estoy un poco confundido aquí: ¿no debería también utilizar -o StrictHostKeyChecking=no , además de las -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/nullopciones - para una respuesta final de?: ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host?
Gabriel Staples
Escritura relacionada que encontré en línea: shellhacks.com/disable-ssh-host-key-checking
Gabriel Staples
5

Si ha reinstalado el servidor y, por lo tanto, la Identificación ha cambiado, debe eliminar la línea 155 especificada /Users/alexus/.ssh/known_hostsy continuar.

Si cambia entre diferentes redes privadas, debe usar nombres de host para conectarse, ya que el cliente ssh también guardará claves dependiendo del nombre de host. Agregue algo como esto a su /etc/hosts:

10.52.11.171 server1
10.52.11.171 server2

y luego se usa ssh server1cuando está conectado a la subred 1 y ssh server2cuando está conectado a la subred2. De esta manera, ambos servidores pueden tener diferentes teclas de host.

etagenklo
fuente
¿Qué sucede si cambia entre dos redes privadas y se conecta a dos mismas IP?
alexus
1
He editado mi respuesta.
etagenklo
2
@alexus Entonces necesita IPv6 :) Pero eso habría sido información útil en su pregunta original.
Michael Hampton
2

-o StrictHostKeyChecking=no solo funciona si el host no está presente en el archivo known_hosts.

Creo que es más limpio (sin advertencias), si espera que la clave de los hosts cambie tal vez debido a la clonación vm, para forzar el desconocimiento de ese tipo de hosts como este:

# Handle possible SSH key changes
host_key=$(ssh-keyscan -t rsa ${host_ip})
grep "${host_key}" ~/.ssh/known_hosts >/dev/null || {
    ssh-keygen -R ${host_ip}
    echo ${host_key} >>  ~/.ssh/known_hosts
}

# connect as normal way
ssh root@${host_ip} "hostname"
Jose Sa
fuente
2

Algunas personas dicen que no está bien, no debes hacer esto, etc., pero también necesito esto para probar un par de dispositivos integrados una y otra vez. Debe deshabilitar StrictHostKeyChecking=no, esto es correcto, pero también restablecer el archivo de hosts conocidos a /dev/null. Aquí un ejemplo con inicio de sesión automático y psen dispositivo remoto.

sshpass -p pass ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host 'ps ax'
eddso
fuente
-2

Inicie sesión en todos sus servidores (y si es RedHat) rm -f /etc/ssh/ssh_host_*y luego reinicie SSHD.

Esto creará nuevas claves de host SSH que no es necesario ignorar.

Solo puedo pensar en una instancia en la que las claves SSH clonadas en varios servidores no solo se desean sino que tampoco arrojan advertencias. Múltiplos de un registro A. Todos los hosts con el registro A tienen la misma clave.

Niels
fuente
66
Esta respuesta es incorrecta. La huella digital es local en el cliente.
89c3b1b8-b1ae-11e6-b842-48d705