Introducción al Error Broken Pipe en SSH
Uno de los problemas más frustrantes para los administradores de sistemas que trabajan con servidores remotos mediante terminal es la desconexión inesperada de las sesiones SSH. El mensaje client_loop: send disconnect: Broken pipe aparece normalmente cuando una conexión permanece inactiva durante un tiempo determinado y el cortafuegos, el enrutador o el propio servidor deciden cerrar el socket de red sin previo aviso.
Causas Principales del Error
Las causas de este fallo de red suelen estar relacionadas con la inactividad y las políticas de tiempo de espera (timeout):
- Inactividad prolongada en la terminal sin envío de datos.
- Configuraciones restrictivas de cortafuegos (firewalls) que cierran puertos tras cierto tiempo.
- Falta de paquetes de sondeo (keepalive) configurados en el cliente o el servidor SSH.
Método 1: Configurar Keepalive en el Cliente SSH
Para evitar que el cliente SSH cierre la conexión por inactividad, puedes configurar la opción de keepalive globalmente en tu máquina local. Sigue estos pasos:
- Abre la terminal en tu ordenador local.
- Edita el archivo de configuración global de SSH con tu editor favorito:
sudo nano /etc/ssh/ssh_configo el archivo de usuario~/.ssh/config. - Agrega o descomenta las siguientes líneas dentro del bloque
Host *:
ServerAliveInterval 60
ServerAliveCountMax 3Esto enviará un paquete nulo cada 60 segundos para mantener la conexión viva hasta un máximo de 3 intentos fallidos consecutivos.
Método 2: Configurar el Servidor SSH (sshd_config)
Si tienes acceso root al servidor remoto, es recomendable aplicar la configuración en el lado del servidor para proteger a todos los usuarios conectados:
- Accede a tu servidor mediante SSH.
- Abre el archivo de configuración del demonio SSH:
sudo nano /etc/ssh/sshd_config. - Busca y modifica los siguientes parámetros (elimina el '#' inicial si lo tienen):
ClientAliveInterval 60
ClientAliveCountMax 3Guarda el archivo y reinicia el servicio SSH para aplicar los cambios ejecutando: sudo systemctl restart ssh o sudo systemctl restart sshd según tu distribución.