%3F.png)
Sólo para dejar esto claro para que no me digan que no haga esto:
- Todas las máquinas en cuestión están en una red local con poco o ningún acceso a Internet (ni siquiera están bien conectadas a la red corporativa)
- Todos los que tienen la capacidad de configurar un ataque de intermediario ya tienen root en la máquina.
- Las máquinas se reinstalan como parte de los procedimientos de control de calidad, por lo que es importante tener nuevas claves de host (necesitamos ver cómo reaccionan las otras máquinas); Sólo estoy tratando de hacer que mi máquina sea más agradable de usar.
Hago muchas reinstalaciones en máquinas que cambian sus claves de host. Esto requiere ingresar ~/.ssh/known_hosts
a mi máquina, eliminar la clave anterior y agregar la nueva clave. Esto es un gran dolor de cabeza, por lo que he comenzado a considerar formas de automatizarlo.
No quiero aceptar ciegamente ninguna clave de host, por lo que parchear OpenSSH para ignorar las claves de host está descartado. He considerado crear un contenedor alrededor del ssh
comando que detectará el error que regresa ssh
y me presentará un mensaje para eliminar la clave anterior o salir. También he considerado crear un demonio que obtenga la última clave de host de una máquina en una lista blanca (hay alrededor de veinte máquinas que se reinstalan constantemente) y reemplace la antigua clave de host en known_hosts
.
¿Cómo automatizarías este proceso?
Respuesta1
Dependiendo de las razones para la reinstalación/las IP permanecen iguales, consideraría configurar "StrictHostKeyChecking" en ~/.ssh/config para Host/IP/Patrones específicos.
Si eso no es posible, considere automatizar la carga de claves en los hosts, tal vez en el proceso de reinstalación.
Respuesta2
Si está utilizando un sistema de gestión de configuración, como Puppet, puede usarlo para mantener el /etc/ssh/ssh_known_hosts
archivo actualizado con los hosts mientras las máquinas cliente se registran en el servidor central. Luego podría habilitar la StrictHostKeyChecking
opción en el archivo de configuración.
Esto es precisamente lo que hacemos con nuestras instancias Amazon EC2 que se registran con nuestro servidor maestro Puppet. Tenemos el servidor Puppet que sirve como jumpbox bastión en nuestras instancias EC2 y es la única máquina a la que se le permite acceder mediante SSH. Luego mantenemos el /etc/ssh/ssh_known_hosts
archivo actualizado con las claves del host y el /etc/hosts
archivo para actualizar la dirección IP DNS pública del EC2.
Respuesta3
Quieres ssh-keyscan
, que se distribuye con openssh. Desde elpágina de manual:
ssh-keyscan is a utility for gathering the public ssh host keys of a num‐
ber of hosts. It was designed to aid in building and verifying
ssh_known_hosts files.
Como parte de su reinstalación, haga que una máquina con una lista actualizada de claves ejecute esto y luego distribuya el archivo conocido_hosts actualizado al resto de las máquinas.
O, como otros mencionaron, puede desactivar StrictHostKeyChecking. Eso lo abre a ataques de intermediarios, aunque puede que eso no sea una preocupación en su entorno.
Respuesta4
Quizás desee guardar las claves del host antes de reinstalar y luego restaurarlas.
Alternativamente, puede utilizar alguna herramienta de gestión de configuración comomotor CFoMarionetapara distribuir una autoridad /etc/ssh/ssh_known_hosts
a todos los clientes en su sitio. (OpenSSH consulta /etc/ssh/ssh_known_hosts
si no hay ninguna entrada coincidente en ~/.ssh/known_hosts
).