¿Qué significa el mensaje de tubería rota en una sesión SSH?

103

A veces mi sesión SSH se desconecta con un Write failed: Broken pipemensaje. Qué significa eso? ¿Y cómo puedo mantener abierta mi sesión?

Lo sé screen, pero esa no es la respuesta que estoy buscando. Creo que esta es una sshdopción de configuración.

Peter Stuifzand
fuente

Respuestas:

89

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 reiniciar su sshd)

echo "ClientAliveInterval 60" | sudo tee -a /etc/ssh/sshd_config

O del lado del cliente:

echo "ServerAliveInterval 60" >> ~/.ssh/config 
Gert
fuente
NB que a veces "* AliveInterval" no es suficiente stackoverflow.com/questions/10665267/…
rogerdpack
1
No hay ~/.ssh/configen mi Mac, ¿tengo que crearlo allí o está en otro lugar?
AGamePlayer
55
@AwQiruiGuo Sí, primero debe crear el directorio ( ~/.ssh). Entoncesmkdir -p ~/.ssh; chmod 700 ~/.ssh; touch ~/.ssh/config
Gert
6

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. Por lo tanto, si puede conectarse a través de ssh user@serverusted, es muy probable que pueda conectarse con mosh simplemente llamando mosh user@server, 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 ).

Perseidas
fuente
3

Si desea tener un período de conexión más largo, en el cliente agregue:

echo 'ServerAliveInterval 30' | sudo tee -a ~/.ssh/config
echo 'ServerAliveCountMax 1200' | sudo tee -a ~/.ssh/config

ServerAliveCountMaxde forma predeterminada, se establece en 3. Por lo tanto, una vez que ServerAliveIntervalhaya 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).

Francisco Costa
fuente
55
¿Por qué usar sudo para un archivo que pertenece al usuario actual o que aún no existe?
Hubert Grzeskowiak
2

Por lo general, significa que su conexión de red (TCP) se restableció. Por ejemplo, su proveedor de internet lo reconectó o algo así.

maxschlepzig
fuente
1

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 arpcomando.

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.

Bill Ang
fuente
0

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:

  1. Apaga tu host
  2. haga ping a la misma IP para ver si otra máquina 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 .

Josir
fuente