Autossh


Aprende a instalar y configurar autossh en linux

autossh
oscar Escrito por oscar 20 July 2026 4 0

Vamos a instalar AutoSSH de forma profesional y estable en Ubuntu, en este post vamos a realizar:

Te explico el procedimiento usado normalmente en producción.

Instalar AutoSSH

Primero actualiza los repositorios.

sudo apt update

Realizamos la instalación:

sudo apt install autossh -y

Verifica la instalación:

autossh -V

Respuesta:  autossh 1.4g

Crear un usuario dedicado (recomendado)

En entornos profesionales no se ejecuta con root, creamos un usuario dedicado exclusivamente a un túnel SSH, puedes crear un usuario de sistema sin directorio home y sin shell interactiva.

sudo useradd \
  --system \
  --no-create-home \
  --shell /usr/sbin/nologin \
  ssh-tunnel

Esto crea el usuario ssh-tunnel con:

Puedes verificarlo:

getent passwd ssh-tunnel

Resultado esperado similar a: ssh-tunnel:x:998:998::/home/ssh-tunnel:/usr/sbin/nologin

su - tunnel

Crear las llaves SSH

Nota: si esta trabajando con una instancia AWS EC2, Maquina de GCP o Azure, no es necesario realizar estos pasos.

Generar la nueva llave SSH

Ejemplo: crear una key llamada autossh_tunnel

ssh-keygen -t ed25519 -f ~/.ssh/autossh_tunnel -C "autossh tunnel key"

Explicación técnica:

Parámetro Función
-t ed25519 algoritmo moderno y seguro
-f nombre del archivo
-C comentario para identificar la llave

Durante el proceso verás:

Enter passphrase (empty for no passphrase):

Nota: Para túneles automáticos con AutoSSH, normalmente se deja vacío.

Archivos generados

Se crearán dos archivos: 

~/.ssh/autossh_tunnel
~/.ssh/autossh_tunnel.pub
Archivo Uso
autossh_tunnel llave privada
autossh_tunnel.pub llave pública

Permisos correctos

Aunque normalmente ya se asignan bien, puedes asegurar:

chmod 600 ~/.ssh/autossh_tunnel
chmod 644 ~/.ssh/autossh_tunnel.pub

Copiar la llave al servidor remoto

ssh-copy-id -i ~/.ssh/autossh_tunnel.pub usuario@servidor

Ejemplo:

ssh-copy-id -i ~/.ssh/autossh_tunnel.pub ubuntu@3.230.182.38

Crear el comando del túnel

Ejemplo de túnel inverso (muy común para exponer un servidor local).

Servidor local:  localhost:3000
Servidor remoto: puerto 26000

Comando:

autossh -M 0 -N \
-o "ServerAliveInterval 30" \
-o "ServerAliveCountMax 3" \
-i /code/n8n-docker/sitios.pem \
-R 26000:localhost:5678 \
ubuntu@codigoelectronica.com

Significado: 

-R puerto_remoto:host_local:puerto_local

Ejemplo real: 

-R 26000:localhost:5678
Elemento Significado
26000 puerto en el servidor
localhost máquina local
5678 puerto local
autossh -M 0 -N -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -R 25000:localhost:3000 usuario@servidor-remoto

Explicación:

Parámetro Función
-M 0 desactiva puerto monitor
-N no ejecuta comandos remotos
-R túnel inverso
ServerAliveInterval keepalive
ServerAliveCountMax reconexión automática

Crear un servicio systemd (forma profesional)

Crear servicio:

sudo nano /etc/systemd/system/autossh-tunnel.service

Contenido:

[Unit]
Description=AutoSSH Reverse Tunnel
After=network.target

[Service]
User=tunnel
Environment="AUTOSSH_GATETIME=0"
ExecStart=autossh -M 0 -N \
-o "ServerAliveInterval 30" \
-o "ServerAliveCountMax 3" \
-R 26000:localhost:3000 \
usuario@servidor-remoto

Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Activar el servicio

Recargar systemd:

sudo systemctl daemon-reload

Habilitar en arranque:

sudo systemctl enable autossh-tunnel

Created symlink '/etc/systemd/system/multi-user.target.wants/autossh-tunnel.service' → '/etc/systemd/system/autossh-tunnel.service'.

Iniciar:

sudo systemctl start autossh-tunnel

Ver estado:

sudo systemctl status autossh-tunnel

Logs:

journalctl -u autossh-tunnel -f

jul 20 20:46:13 ce-web systemd[1]: autossh-tunnel.service: Main process exited, code=exited, status=217/USER
jul 20 20:46:13 ce-web systemd[1]: autossh-tunnel.service: Failed with result 'exit-code'.
jul 20 20:46:23 ce-web systemd[1]: autossh-tunnel.service: Scheduled restart job, restart counter is at 11.
jul 20 20:46:23 ce-web systemd[1]: Started autossh-tunnel.service - AutoSSH Reverse Tunnel.
jul 20 20:46:23 ce-web autossh[9179]: port set to 0, monitoring disabled
jul 20 20:46:23 ce-web autossh[9179]: starting ssh (count 1)
jul 20 20:46:23 ce-web autossh[9179]: ssh child pid is 9182
jul 20 20:46:23 ce-web autossh[9182]: ** WARNING: connection is not using a post-quantum key exchange algorithm.
jul 20 20:46:23 ce-web autossh[9182]: ** This session may be vulnerable to "store now, decrypt later" attacks.
jul 20 20:46:23 ce-web autossh[9182]: ** The server may need to be upgraded. See https://openssh.com/pq.html

Verificar que el túnel funciona

En el servidor remoto:

ss -tulpn | grep 25000

o

netstat -tulpn | grep 25000

Luego probar: 

http://IP_SERVIDOR:25000

Recomendaciones profesionales

Limitar acceso SSH

En el servidor remoto: sshd_config

sudo nano /etc/ssh/sshd_config

Agregar:  

GatewayPorts yes

y reiniciar ssh.

Firewall

Abrir el puerto:

sudo ufw allow 25000/tcp

Usar llaves dedicadas

Puedes crear una llave específica:

~/.ssh/id_autossh

Arquitectura típica (tu caso con EC2)

Usuario Internet
       │
       │
   Nginx EC2
       │
       │ localhost:25000
       │
    AutoSSH Tunnel
       │
       │ SSH
       │
Servidor local
localhost:3000
NextJS

Comentario

Debe aceptar antes de enviar