A veces mi sesión SSH se desconecta con un Write failed: Broken pipe
mensaje. Qué significa eso? ¿Y cómo puedo mantener abierta mi sesión?
Sé acerca de screen
, pero esa no es la respuesta que estoy buscando. Creo que esta es una opción de configuración sshd
.
Es posible que su servidor cierre las conexiones que están inactivas durante demasiado tiempo. Puede actualizar su cliente (ServerAliveInterval
) o su servidor (ClientAliveInterval
)
ServerAliveInterval
Sets a timeout interval in seconds after which if no data has
been received from the server, ssh(1) will send a message through
the encrypted channel to request a response from the server. The
default is 0, indicating that these messages will not be sent to
the server. This option applies to protocol version 2 only.
ClientAliveInterval
Sets a timeout interval in seconds after which if no data has
been received from the client, sshd(8) will send a message
through the encrypted channel to request a response from the
client. The default is 0, indicating that these messages will
not be sent to the client. This option applies to protocol
version 2 only.
Para actualizar su servidor (y reinicie su sshd
)
echo "ClientAliveInterval 60" | Sudo tee -a /etc/ssh/sshd_config
O del lado del cliente:
echo "ServerAliveInterval 60" >> ~/.ssh/config
Una solución alternativa sería usar mosh
- el Shell móvil . A diferencia de ssh, se conecta a través de UDP y admite roaming. Puede comenzar su sesión en casa, suspender su computadora portátil, llevarla al trabajo/amigos/donde sea que tenga Internet, desconectar su computadora portátil y continuar trabajando como si nada hubiera pasado. Es especialmente útil si tiene una conexión a Internet pésima: muestra comentarios instantáneos si sus pulsaciones de teclas no llegan al servidor y continuamente intenta restablecer la conexión.
La instalación y configuración son simples: ahora se incluye en todas las distribuciones actuales de Linux (más algunas que no son Linux) y coordina la inicialización y autenticación de la sesión a través de una conexión ssh previa. Entonces, si puede conectarse a través de ssh [email protected]
es muy probable que pueda conectarse con mosh simplemente llamando mosh [email protected]
, si los paquetes mosh están instalados en ambos extremos.
La razón principal de las fallas de conexión es que debe llegar al servidor en un puerto UDP (rango predeterminado: 60000-61000) para que mosh funcione. Entonces, si el servidor está detrás de un firewall, no tiene suerte si no puede perforarlo usted mismo ( implicaciones de seguridad ).
Si desea tener un período de conexión más largo, en el cliente agregue:
echo 'ServerAliveInterval 30' | tee -a ~/.ssh/config
echo 'ServerAliveCountMax 1200' | tee -a ~/.ssh/config
ServerAliveCountMax
por defecto está configurado en 3. Por lo tanto, una vez que ServerAliveInterval
haya enviado 3 paquetes pequeños de información a su servidor, se cerrará automáticamente. Establecerlo en 1200 significa que este proceso tendrá que ocurrir al menos 1200 veces. En resumen, debe estar conectado al menos 30 * 1200 segundos (10 horas).
Por lo general, significa que su conexión de red (TCP) se restableció. P.ej. su proveedor de internet lo reconectó o algo así.
Tuve el mismo problema pero no es como se esperaba. Si encuentra que en la misma red otro servidor está intentando la misma dirección IP, enfrentará el mismo problema. Para resolver esto, debe verificar si hay otros servidores que usan su misma dirección IP. Esto se puede hacer usando el comando arp
.
Estoy usando Debian, así que aquí hay una muestra de los comandos que uso para determinar si otro servidor estaba usando la misma dirección IP
apt-get install arp-scan
arp-scan -I eth0 -l | grep 192.168.1.42
192.168.1.42 d4:eb:9a:f2:11:a1 (Unknown)
192.168.1.42 f4:23:a4:38:b5:76 (Unknown) (DUP: 2)
Notará dos conjuntos de direcciones mac que usan la misma dirección IP. Evite conflictos configurando uno a otra dirección IP.
Otra causa del "mensaje de tubería rota" es que otra máquina está intentando usar la misma IP que su host.
Una manera simple de probar si alguien más está usando esa IP:
Para averiguar qué máquinas hay en su red, puede usar este título de pregunta de Unix y Linux: Cómo encontrar qué otras máquinas están conectadas a la red local .