Conexión remota persistente con autossh

Conexión remota persistente con autossh en Linux

En entornos de administración de sistemas y operaciones de red, mantener un túnel SSH activo de manera confiable es fundamental para realizar tareas remotas, monitorización y despliegues automatizados. autossh es una herramienta que extiende las capacidades de OpenSSH para garantizar que un túnel SSH se reanude automáticamente ante interrupciones de red o cierres imprevistos.

1. ¿Qué es autossh

autossh es un envoltorio (wrapper) de SSH escrito en C que monitoriza la conexión establecida y, en caso de caída, la restablece automáticamente. Se basa en el envío de paquetes de “prueba” a través del canal de control SSH y, cuando detecta fallo, relanza la sesión.

2. Ventajas frente a SSH puro

  • Reconexión automática: Recupera el túnel sin intervención manual.
  • Monitoreo de estado: Detecta caídas por inactividad o fallos de red.
  • Flexibilidad: Puede usarse en scripts, cron jobs o como servicio de sistema.
  • Ligero: No requiere dependencias adicionales más allá de SSH.

3. Instalación y requisitos

autossh está presente en la mayoría de las distribuciones Linux:

  • En Debian/Ubuntu: sudo apt update sudo apt install autossh
  • En RHEL/CentOS/Fedora: sudo dnf install autossh o sudo yum install autossh
  • En Arch Linux: sudo pacman -S autossh

Requisitos adicionales:

  • Acceso a cliente OpenSSH.
  • Permisos adecuados (clave SSH ya configurada).

4. Sintaxis básica de autossh

La línea de comandos de autossh es muy similar a la de ssh. Ejemplo mínimo:

autossh -M 20000 -f -N -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -R 2222:localhost:22 usuario@remoto.example.com

Explicación de parámetros clave:

Parámetro Función
-M 20000 Puerto de monitoreo local. Desactívalo con -M 0 si usas opciones propias de SSH.
-f Envía el proceso al fondo (background).
-N No ejecuta comandos remotos útil para túneles.
-R 2222:localhost:22 Crea un túnel inverso del puerto 2222 remoto al localhost:22.

5. Configuración de autenticación con claves SSH

  1. Genera un par de claves en el cliente: ssh-keygen -t ed25519 -f ~/.ssh/id_autossh.
  2. Copiar clave pública al servidor remoto: ssh-copy-id -i ~/.ssh/id_autossh.pub usuario@remoto.example.com.
  3. Verificar acceso sin contraseña: ssh -i ~/.ssh/id_autossh usuario@remoto.example.com.
  4. Opcional: restringir la clave en authorized_keys para el túnel (comando forced-commands).

6. Desplegar autossh como servicio de sistema

Crear unidad systemd para mayor robustez.

[Unit]
Description=autossh Tunnel Service
After=network.target

[Service]
User=usuario
Environment=AUTOSSH_GATETIME=0
ExecStart=/usr/bin/autossh -M 0 -N -R 2222:localhost:22 usuario@remoto.example.com -i /home/usuario/.ssh/id_autossh
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Habilitar e iniciar:

sudo systemctl enable autossh-tunnel.service
sudo systemctl start autossh-tunnel.service

7. Monitoreo y diagnósticos

  • Ver logs de systemd: journalctl -u autossh-tunnel.service -f
  • Comprobar procesos activos: ps aux grep autossh
  • Probar conectividad manual: telnet remoto.example.com 20000 (puerto monitor).

8. Integración con VPNs

En ocasiones, se emplea autossh junto con soluciones VPN para asegurar aún más el tráfico:

  • OpenVPN: VPN tradicional con cifrado SSL/TLS.
  • WireGuard: Ligero, moderno y de alto rendimiento.

Al combinar autossh y una VPN, puedes encapsular el tráfico de túneles SSH dentro de un túnel VPN, proporcionando capas adicionales de escudo ante inspecciones de red o firewalls corporativos.

9. Buenas prácticas de seguridad

  • Usar siempre claves con passphrase y ssh-agent.
  • Restringir el puerto remoto y la IP de origen en iptables o firewalld.
  • Actualizar OpenSSH y autossh periódicamente.
  • Emplear opciones SSH como PermitRootLogin no y AllowUsers en sshd_config.

10. Casos de uso avanzados

  • Acceso a consolas de dispositivos IoT a través de túneles inversos.
  • Replicación de bases de datos en entornos remotos con túneles dedicados.
  • Supervisión remota de cámaras IP o sensores sin IP pública.
  • Automatización de despliegues en entornos aislados.

11. Preguntas frecuentes (FAQ)

¿Puedo usar autossh sin puerto de monitoreo

Sí. Con -M 0 delegas la supervisión a las opciones de SSH (ServerAliveInterval y ServerAliveCountMax).

¿Cómo evito encadenar múltiples procesos autossh

Configura AUTOSSH_GATETIME en 0 y comprueba que -M no esté en uso en varias instancias.

¿Se puede usar en Windows

No nativamente en Windows 10/11 podrías usar Windows Subsystem for Linux (WSL) o Cygwin para instalarlo.

12. Conclusión

autossh es una solución robusta y ligera para mantener túneles SSH siempre activos, minimizando tiempos de inactividad y evitando intervenciones manuales. Su integración con servicios systemd y su compatibilidad con claves SSH hacen de él una herramienta esencial en la caja de herramientas de administradores de sistemas y DevOps.

Artículo realizado para profesionales de TI que buscan optimizar la confiabilidad de sus conexiones remotas en Linux.

  • Hola 👋 , soy la IA de Linuxmind.dev, te puedo ayudar a aprender.
Gathering thoughts ...

Leave a Reply

Your email address will not be published. Required fields are marked *