Autossh es una herramienta simple pero efectiva para los SysAdmins, capaz de mantener una conexión SSH y reiniciarla automáticamente si se cae. Específicamente ayuda a los administradores de sistemas a crear conexiones SSH estables sobre redes inestables.
Este artículo profundizará en Autossh y algunas maneras de utilizarlo eficazmente.
¡Sigue leyendo para aprender más sobre él!
¿Qué hace Autossh?
Para entender Autossh, primero debes saber qué hace SSH o Secure Shell. Se trata de un protocolo para la comunicación encriptada entre dos sistemas de computación. El cliente solicita al servidor que forme una conexión y se crea un par de claves pública-privadas para encriptar la comunicación.
Estas conexiones SSH pueden romperse o dejar de funcionar por muchas razones. Algunos firewalls, por ejemplo, las desconectan tras un período de inactividad. Si tienes ciertos accesos, es posible aumentar el tiempo de espera para SSH, pero no es viable continuar indefinidamente.
Teniendo en cuenta esto, Autossh es un programa que monitorea una conexión SSH y la reinicia nuevamente si deja de funcionar o se desconecta. A menudo se utiliza para mantener las conexiones cuando éstas no son estables, cuando vuelven a caer debido a otras razones o si cambia la dirección IP.
¿Cómo funciona Autossh?
Autossh utiliza dos métodos para monitorear el túnel SSH:
- Continúa enviando paquetes entre el cliente y el servidor y, si esto no es interrumpido, se asume que el túnel está funcionando. En este caso, dos puertos transportan estos paquetes, uno del cliente al servidor y otro del servidor al cliente.
- Se utiliza un puerto eco remoto para enviar los paquetes en ambos sentidos.
Existen reglas específicas sobre cómo Autossh reinicia una conexión SSH. Por ejemplo, si el usuario usa el comando exit, Autossh lo tomará como una salida intencional y cerrará la conexión. O si le ordena que se detenga, también se interrumpirá la conexión.
Autossh reiniciará la conexión en todas las otras situaciones en las que se haya caído una conexión SSH. Por supuesto, puedes ordenarle que la reinicie incluso si no se cayó.
Cada diez minutos (por defecto), Autossh intentará enviar paquetes para ver si la conexión todavía existe. Si falla, el programa intentará reiniciar la conexión.
Cuando se usa SSH, hay dos métodos de autenticación, uno sin y otro con contraseñas. Para Autossh, no la requieres, porque de lo contrario se te pediría cada vez que intente reiniciar la conexión.
Instalando Autossh
Instalar Autossh es bastante sencillo en una máquina Linux. Dependiendo de la distribución, puedes utilizar apt o YUM para hacerlo.
Para sistemas Debian o Ubuntu, el comando es:
$ sudo apt-get install autossh
Para sistemas RHEL, Fedora o CentOS, el comando es:
$ sudo yum install autossh
Para Windows, la forma más sencilla es utilizar Cygwin, una colección de herramientas que esencialmente te da un entorno similar a Linux en un sistema Windows.
Si sigues este camino, el primer paso es instalar Cygwin. Para ello, ingresa a Cygwin, descarga el archivo setup-x86_64.exe y ejecútalo. Aparecerá una pantalla parecida a ésta.
Pulsa "Siguiente" y elige "Descargar desde Internet".
Pulsa "Siguiente" y elige dónde quieres instalarlo.
Pulsa "Siguiente" y selecciona dónde quieres que esté el directorio de tu paquete.
Pulsa "Siguiente" y selecciona tu conexión a Internet.
En el siguiente paso, el asistente te mostrará una lista de fuentes desde donde descargar Cygwin. Elige una fuente con HTTPS.
Ahora, opta por los paquetes que deseas instalar. Cygwin recomienda NO instalarlos todos. Así que cambia el menú “Ver” a “Completo” y busca Autossh.
Pulsa “Siguiente”. Una vez completada la instalación, aparecerá la siguiente ventana.
Pulsa "Finalizar", abre Cygwin e introduce el siguiente comando:
autossh -V
El comando hace que Autossh imprima el número de versión y salga. Si todo va bien, serás recibido con el siguiente mensaje.
En macOS, la forma más fácil de instalar AutoSSH es usando Homebrew. Si no lo tienes instalado, abre el terminal y ejecuta este comando:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Una vez que lo hagas, simplemente escribe este comando para instalar AutoSSH:
brew install autossh
Ejecutar Autossh es relativamente sencillo. Casi todos los comandos son similares a SSH, excepto que reemplazas ssh por autossh.
Otra diferencia es que puedes usar -M para especificar el puerto a monitorear. Incluso si no estás utilizando la opción, tienes que mencionarla; en este caso, será -M 0 (esto deshabilita el puerto de monitoreo).
Otra opción es -f. Así, Autossh pasaría a segundo plano y no pediría contraseñas. Y cuando el comando es enviado a SSH, el '-f' será removido ya que tiene diferentes significados para SSH.
Ejemplos de Autossh
Si utilizas Autossh para iniciar sesión en un servicio, el comando tendrá el siguiente aspecto:
autossh -M -0 nombre_usuario@nombre_servidor
En el ejemplo anterior, estamos desactivando el monitoreo.
Para usar el puerto 2000 como puerto de monitoreo, el comando será así:
autossh -M 2000 nombre_usuario@nombre_servidor
En este caso, Autossh utilizará 2000 como puerto de reenvío y el puerto 2001 para recibir los datos de vuelta.
Por defecto, Autossh establece 30 segundos como tiempo de puerta de salida. Esto ocurre cuando se inicia e intenta crear un túnel. Si demora más en conectarse, lo intentará de nuevo. Pero si falla antes de ese período, asume que la conexión es imposible y sale. Al iniciar Autossh, puedes ajustar esto con la variable AUTOSSH_GATETIME.
AUTOSSH_GATETIME = 45 autossh -m 2000 nombre_usuario@nombre_servidor
En este caso, el tiempo de inicio es de 45 segundos. Si es 0, esta característica se desactiva, y Autossh no saldrá después de 30 segundos.
Alternativas a Autossh
Existen muchas alternativas a Autossh para crear un túnel SSH persistente. Si quieres ir por la vía de los scripts, Github es la indicada.
Otras opciones son:
- Persistent SSH: una herramienta del sistema Windows que mantiene conexiones SSH como Autossh. Tiene una GUI y puede ser configurada a través de los navegadores. Existe una versión gratuita para sistemas sin servidor, sin límite de tiempo.
- iTivity SSH Manager: se trata de una solución completa de gestión de túneles. Básicamente, crea un hiperservidor al que se conectarán todos los dispositivos de la red. No tienes que establecer conexiones ni preocuparte si las SSH se caen manualmente.
Puntos clave
Autossh es una herramienta para monitorear y reiniciar conexiones SSH cuando se caen.
Una vez instalada, la herramienta supervisará un túnel SSH utilizando cualquiera de los dos métodos existentes: en el primero, se usan dos puertos de monitoreo (uno para enviar paquetes de datos desde el cliente al servidor y el otro para mandarlos en el sentido contrario); en el segundo, se especifica un puerto para el servicio de eco remoto, que devuelve los datos de prueba.
En ambos casos, el envío de paquetes entre el servidor y el cliente se hace para ver si la conexión sigue existiendo.
Hay tres argumentos para Autossh. -V devolverá la versión y saldrá, -M especificará el puerto de monitoreo, y -f ejecutará AutoSSH en segundo plano.
Si no quieres usar esta herramienta, hay un par de alternativas que puedes probar:
- Scripts que reinician automáticamente SSH
- Persistent SSH
- iTivity SSH Manager
Preguntas más frecuentes
¿Qué es el SSH inverso?
En algunas situaciones resulta difícil alcanzar un sistema remoto, debido a las configuraciones en su extremo. En estos casos, puedes permitir que la PC que se encuentra en otro lugar se conecte a tu extremo, aunque no puedes realizar operaciones en la computadora remota. Puedes utilizar esta conexión para crear un túnel SSH de vuelta al sistema remoto. Esto se llama SSH inverso. Y la conexión SSH que va desde tu sistema al remoto se denomina túnel SSH inverso.
¿Qué es el paquete Autossh?
Para usar Autossh, necesitas instalar el paquete Autossh. Esto puede ser para tus sistemas Linux o terminal Cygwin.
¿Es SSH una VPN?
Son similares en lo que hacen, pero lo realizan de manera diferente. Los paquetes de datos enviados a través de una VPN están encriptados, mientras que es la red la que está encriptada en SSH, pero los paquetes individuales no. Además, la VPN funciona en la capa de red, en tanto que SSH lo hace en la de aplicación.
Ambas tienen sus ventajas, desventajas y casos de uso específicos.
¿Qué es tunelizar SSH?
Tunelizar SSH refiere a la creación de una red o canal cifrado entre dos sistemas informáticos en un túnel SSH o Secure Shell. Suele utilizarse para controlar sistemas remotos y permitir el acceso a recursos de red.