SSH en una caja con una IP frecuentemente cambiada

22

Tengo algunas cajas en la nube que cambian su IP con frecuencia.

Estoy usando el nombre de host pero tengo que editar el archivo known_hosts cada vez que se inicia el servidor debido a este mensaje de error:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is

Además de los riesgos de seguridad y los que están asociados con lo que quiero hacer, ¿hay alguna forma de ignorar este error o sobrescribir el archivo conocido_hosts automáticamente para que no siempre tenga que editarlo yo mismo?

coneybeare
fuente

Respuestas:

20

Edite su archivo ssh_config y agregue cambiar esta línea:

CheckHostIP no

CheckHostIP por defecto es 'yes'. Lo que esto hace es hacer el tipo de verificación que está fallando. Desactivarlo significa que solo confía en que la IP es variable, y hará una comprobación de clave con el nombre de host.

sysadmin1138
fuente
2
Esto desactiva una función de seguridad para todos los servidores a los que se conectará, lo cual es una práctica extremadamente mala. En su lugar, debe usar esta opción solo para un host específico que sabe que tendrá este problema, o usar la opción HostKeyAlias, nuevamente para un host específico.
zaTricky
@zaTricky "¿Práctica extremadamente mala"? ¿Qué tiene de extremo? Creo que es casi tan seguro, es simplemente una preferencia individual. Simplemente debe anclar una clave a un nombre de host (en lugar de IP). Para https, el HPKP funciona de manera similar y todos dicen que es seguro o demasiado seguro.
kubanczyk
@kubanczyk Esto dice que sea un entorno global; no hay consejos sobre la especificación de un host, lo cual sí
señalé
25

Además: solo puede intentar deshabilitar la verificación CheckHostIP para ese nombre:

Host *
  [ global settings .. ]

Host very.dynamic.host
  CheckHostIP no
Koos van den Hout
fuente
55
Esta es la mejor opción para reducir el impacto de seguridad al deshabilitar la comprobación de IP.
Espo
3

Muchas de las respuestas aquí funcionarán, pero técnicamente son soluciones alternativas. OpenSSH ya tiene una característica incorporada con esto en mente: HostKeyAlias.


En su archivo .ssh / config, agregue HostKeyAlias <alias>a una configuración de host:

host myserver.example.com
HostKeyAlias myserver.example.com

Con esto en su lugar, la conexión con el servidor myserver.example.comno va a usar el nombre de host o la dirección IP de la referencia local - que siempre solamente utilizar los HostKeyAlias la que se conecte a ese servidor. Para mí tiene sentido usar el nombre de host, pero por supuesto puede usar cualquier alias que desee.


Las configuraciones típicas para mí para hosts dinámicos son así:

host myserver
hostname myserver.dyn.example.com
HostKeyAlias myserver.private.example.com

Esto también se puede usar en algunos escenarios oscuros en los que sabe que muchos de sus servidores tienen las mismas claves de host (generalmente este no debería ser el caso). Esto evitaría entradas duplicadas. En el futuro, si las claves cambian legítimamente, no tiene que reemplazar / eliminar múltiples entradas. Solo uno. Los servidores Gitlab Geo son un buen ejemplo de esto.


Con respecto a borrar el archivo known_hosts, sugeriría mirar otras preguntas / respuestas específicamente relacionadas con el mantenimiento / eliminación de entradas obsoletas de unknown_hosts. Por ejemplo, vea Cómo administrar mi archivo .ssh / known_hosts ; Estoy especialmente impresionado por la respuesta de user1953828, aunque veo que todavía no tiene muchos votos a favor. :)

zaTricky
fuente
Esto muestra cuánto valor tiene una respuesta el mismo día en SO frente a la respuesta correcta, respondida 8 años después.
paridad3
2

Utilizo estas opciones poco fiables para solucionar este problema. (La clave pública de mi host se regenera con bastante frecuencia. Esto elimina la comprobación de IP y clave)

ssh remoteServerName -l username -o "UserKnownHostsFile=/dev/null"

También puede usar esto si la clave permanece igual pero la IP cambia:

ssh remoteServerName -l username -o "CheckHostIP=no"
Zv_oDD
fuente
Si su servidor cambia las claves de host con tanta frecuencia, debería considerar configurar la firma de la clave de host
Cameron Tacklind
1

Puede configurar StrictHostKeyChecking = no en la configuración de su cliente ssh (es decir, el archivo ~ / ssh / config en la máquina desde la que se conecta), para ignorar la advertencia.

hayalci
fuente
1

Podría ponerlo CheckHostIP noen su ~/.ssh/configarchivo, pero eso lo deja abierto a ataques de suplantación de identidad. Si no le preocupa eso, entonces esta configuración debería desactivar la known_hostsverificación.

Steven Monday
fuente
0

Evito agregar las huellas digitales a mi known_hostsarchivo cuando me conecto a máquinas transitorias de AWS. Yo uso un comando como

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i secret.pem [email protected]

para conectarse con ellos. No le preguntará si desea agregar la máquina "a la lista de hosts conocidos". Reemplácela 10.0.0.5por la dirección IP de su máquina y secret.pempor la ruta completa de su clave Ssh. Todavía recibirá advertencias de que 10.0.0.5se ha agregado, pero realmente se ha desvanecido /dev/null. Hago esto con la frecuencia suficiente para establecer un alias en mi~/.profile

alias awsssh='ssh -i secret.pem -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

Reservo los ssh [email protected]comandos de tipo para máquinas en las que tuve problemas para verificar la huella digital.

Hbar
fuente
Esto tiene sentido para los servidores para que sólo se conecte a la vez - pero hay mejores maneras de deshacerse de las entradas obsoletas - y no debe ser que preocupado por lo sucio archivo de sus known_hosts es. Probablemente haya gastado mucho más tiempo y energía creando ese alias que el valor que el alias le ha traído.
zaTricky
-2

Hacer conocido_hosts de solo lectura.

Eldelshell
fuente
Esto rompe la funcionalidad cuando las opciones pragmáticas están fácilmente disponibles. : - /
zaTricky