by administrador
Share
Si tenemos algun script que ejecuta remotamente comandos en muchos equipos usando SSH, puede que alguna vez nos hayamos encontrado con esperas interminables cuando intentábamos lanzar cosas en equipos que estaban apagados, inaccesibles, etc
Para cambiar el timeout en el cliente SSH y obtener fallos de timeout de forma más rápida, podemos usar este parámetro en el cliente ssh, que indica en segundos el tiempo de timeout de SSH.
-o ConnectTimeout=3
De esta forma, a los 3 segundos de intentar conectar, el cliente abortará la conexión, dará un error de timeout y seguirá a otra cosa, entorpeciendo mucho menos la ejecución de nuestro script.
Hay que tener en cuenta los tiempos habituales de respuesta del SSH. Hay máquinas que están detrás de varios firewalls y que tardan más en realizar la conexión. Para estos casos, cambiar el timeout en el cliente SSH a los 3 segundos que te he puesto anteriormente podría ser demasiado agresivo. Adapta los timeouts SSH a tu entorno.
Desde línea de comandos, quedaría tal que así:
ssh -o ConnectTimeout=3 usuario@hostremoto
Pasados 3 segundos completos desde que intenta conectar, si no hay respuesta, el cliente nos devolvería el siguiente error
ssh: connect to host hostremoto port 22: Connection timed out
Nos encantaría recibir tus comentarios
Extraer el contenido de un paquete de drivers o firmware de HPE empaquetado en formato SCEXE
Como librarnos de la dependencia rota de libappindicator1 en Debian Bullseye
Como instalar Displaycal en Debian 11 para calibrar el monitor, saltándonos las dependencias de python2 de la aplicación.
Como manejar los logs con systemd y journalctl. Como borrarlos, configurar rotados o eliminarlos en función de antiguedad o tamaño.
Nunca lo pude poner en práctica, pero en un curso de Hacking Etico con Debian se nos enseñó que hay un modo de establecer una conexión mediante tres puertos distintos antes de poder acceder al puerto 22 para evitar intrusiones no esperadas a nuestros servidores en forma remota vía SSH.
No confundir con los «3 golpes (3-way handshake)» de toda conexión TCP/IP.
La idea es impedir una conexión SSH externa no deseada. Si no se realiza el intento de acceso a través de los puertos específicos (previamente establecidos por el servidor) la IP cliente se bloquea por el lapso de tiempo que se considere seguro y necesario.
Es decir, si una IP determinada, intentaba ingresar vía SSH al puerto 22, sin haber intentado comunicarse antes por los otros tres puertos al servidor, (en el orden en que estableció el administrador del sistema) la comunicación era rechazada de plano y bloqueada la IP.
Para evitar automatizaciones vía scripting de intentos escalonados, el primer puerto debía ser mayor a 7000 (por ejemplo) el segundo debía ser menor a 4000 y finalmente, el tercero debía estar entre 4000 y 7000.
Recién en ese momento, la IP (si acertaba en tiempo asignado para los intentos y en el número de puertos correspondientes) se permitía el intento de conexión por el puerto 22 a esa IP.
El tiempo en que podía realizarse por completo la rutina de intentos de conexión desde una misma IP era de unos 120 segundos. Suficientes para intentar el «ping» que abriera las puertas al sistema.
Hola, eso se llamaba port knocking en su dia y si que era muy efectivo. Gracias por el comentario :)