Categorías: Linux

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

  1. AMDOA BURINGAL OVIRA 21 de octubre de 2016 at 19:46 - Reply

    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.

    • administrador 23 de octubre de 2016 at 19:21 - Reply

      Hola, eso se llamaba port knocking en su dia y si que era muy efectivo. Gracias por el comentario :)

Entradas relacionadas