¿Qué puedo hacer para configurar SSH tanto en el cliente como en los servidores para evitar Write Failed: broken pipe
errores? A menudo ocurre si duerme su computadora cliente y se reanuda más tarde.
screen
?
¿Qué puedo hacer para configurar SSH tanto en el cliente como en los servidores para evitar Write Failed: broken pipe
errores? A menudo ocurre si duerme su computadora cliente y se reanuda más tarde.
screen
?
Respuestas:
He intentado esto /etc/ssh/ssh_config
para Linux y Mac:
Host *
ServerAliveInterval 120
Esta es la frecuencia con la que, en segundos, debe enviar un mensaje de alerta al servidor. Si eso no funciona, entrena a un mono para presionar enter cada dos minutos mientras trabajas.
Puede configurar ServerAliveInterval
en /etc/ssh/ssh_config
la máquina del cliente o ClientAliveInterval
en /etc/ssh/sshd_config
la máquina del servidor. Intente reducir el intervalo si aún recibe el error.
La configuración para un solo usuario se puede establecer en un archivo ~/.ssh/config
tanto en el lado del servidor como del cliente. Asegúrese de que el archivo tenga los permisos correctos chmod 644 ~/.ssh/config
.
Bad configuration option: ClientAliveInterval
Bad configuration option
error en OSX 10.8.4.
Las sesiones de SSH pueden interrumpirse debido a numerosas y posiblemente inevitables razones.
Se llama una utilidad útil que se puede utilizar para mitigar los problemas causados por esto screen
. Screen es una poderosa utilidad que le permite controlar múltiples terminales que permanecerán con vida independientemente de la sesión ssh. Por ejemplo, si ejecuta screen
una sesión ssh, verá una nueva terminal abierta y puede usarla para ejecutar trabajos. Digamos que su sesión ssh muere en el proceso. Ejecutar screen -d
luego screen -r
volverá a abrir la última sesión y podrá continuar desde allí. Asegúrese de leer parte de la documentación antes de usarla.
screen -d -r
para recuperar su última sesión.
screen -dr
. O screen -x
dependiendo de lo que estés planeando hacer. El punto es que uno debe saber qué hacen todos esos interruptores, para poder usar los apropiados y no solo seguir ciegamente las sugerencias de la gente de Internet. Hay un buen resumen compacto disponible aquí: ss64.com/bash/screen.html
Configuración del cliente
Intenta crear el archivo:
~/.ssh/config
Agrega los contenidos:
Host *
ServerAliveInterval 30
ServerAliveCountMax 5
Ahora ssh a su servidor y vea si su problema está solucionado La opción ClientAliveInterval solo es útil al configurar el servidor ssh (también conocido como sshd), no cambia nada en el lado del cliente ssh, así que no lo use en el archivo de configuración anterior.
Esto enviará una señal de saludo al servidor si no se han recibido paquetes en los 30 segundos anteriores (como se especificó anteriormente). Sin embargo, si el número de señales consecutivas de hola-eres-tú llega a ServerAliveCountMax, ssh se desconectará del servidor. El valor predeterminado es 3 (por lo tanto, 3 * 30 = 90 segundos sin actividad del servidor), aumente si se ajusta a sus necesidades. Hay muchas más opciones de configuración para el archivo .ssh / config y puedes leer:
Usar un archivo de configuración SSH
Para más información sobre otras opciones. Es posible que no desee aplicar esto a cada servidor al que se conecte, lo que hará este ejemplo. O restrinja solo a un servidor en particular reemplazando la línea Host *
con Host <IP>
(reemplace por una dirección IP, consulte la página de manual de ssh_config).
Configuración del servidor
Del mismo modo, puede decirle al servidor que sea amable con sus clientes. El archivo de configuración es /etc/ssh/sshd_config
.
ClientAliveInterval 20
ClientAliveCountMax 5
Usted puede desactivarlo mediante el establecimiento ClientAliveInterval
de 0
o ajustar ClientAliveInterval
y ClientAliveCountMax
fijar un máximo de inactividad cliente ssh sin responder a las sondas. Una ventaja de esta configuración sobre TCPKeepAlive es que las señales se envían a través de los canales cifrados, por lo que es menos probable que se pueda suplantar.
Estoy actualizando remotamente un servidor Ubuntu de lúcido a preciso y perdí la conexión ssh en medio de la actualización con el mensaje "Falló la escritura. Tubería Brocken". ClientAliveInterval y ServerAliveInterval no hicieron nada. La solución es activar las opciones de TCPKeepAlive en el cliente ssh:
TCPKeepAlive yes
en
/etc/ssh/ssh_config
Para el cliente, edite su ~/.ssh/config
(o /etc/ssh/ssh_config
) archivo de la siguiente manera:
Host *
TCPKeepAlive yes
ServerAliveInterval 120
TCPKeepAlive : especifica si el sistema debe enviar mensajes de keepalive TCP al otro lado. Si se envían, se notará la muerte de la conexión o el bloqueo de una de las máquinas. Sin embargo, esto significa que las conexiones morirán si la ruta se corta temporalmente, y algunas personas lo encuentran molesto (el valor predeterminado es 'sí').
ServerAliveInterval : establece un intervalo de tiempo de espera en segundos después del cual, si no se han recibido datos del servidor, ssh (1) enviará un mensaje a través del canal cifrado para solicitar una respuesta del servidor. El valor predeterminado es 0, lo que indica que estos mensajes no se enviarán al servidor.
Para el servidor, edite su /etc/ssh/sshd_config
como:
ClientAliveInterval 600
ClientAliveCountMax 0
Si desea que el cliente ssh salga (tiempo de espera) automáticamente después de 10 minutos (600 segundos).
ClientAliveCountMax : indica el número total de mensajes checkalive enviados por el servidor ssh sin obtener ninguna respuesta del cliente ssh. El valor predeterminado es 3.
ClientAliveInterval : indica el tiempo de espera en segundos. Después de x número de segundos, el servidor ssh enviará un mensaje al cliente pidiéndole respuesta. El valor predeterminado es 0 (el servidor no enviará un mensaje al cliente para verificarlo).
Ver también: ¿Qué hacen las opciones ServerAliveInterval
y ClientAliveInterval
en sshd_config, precisamente?
Absolutamente amo a Mosh. Con frecuencia ingreso a un servidor, cierro mi computadora portátil y voy a un café, lo abro y continúo como si nada hubiera cambiado.
Mosh (carcasa móvil)
Aplicación de terminal remota que permite la itinerancia , admite conectividad intermitente y proporciona eco local inteligente y edición de línea de las pulsaciones de teclas del usuario.
Mosh es un reemplazo para SSH. Es más robusto y receptivo, especialmente a través de Wi-Fi, celulares y enlaces de larga distancia.
Mosh es un software gratuito, disponible para GNU / Linux, FreeBSD, Solaris, Mac OS X y Android.
Para mí, estaba obteniendo Write failed: Broken pipe
incluso cuando estaba escribiendo activamente en vim o en el indicador de comandos de shell. Tampoco pude navegar por Internet localmente por un tiempo. (Me estaba conectando remotamente a Ubuntu usando Terminal).
Otros en mi red transmiten muchos videos de Netflix y otros lugares. No puedo probarlo, pero sospecho que es un problema de ISP o enrutador. Por ejemplo, Verizon y Netflix se señalan entre sí por los problemas de red de sus clientes.
Si tiene una conexión de acceso telefónico y está transmitiendo video o música con una conexión SSH o telnet simultánea, es inevitable que en algún momento reciba un mensaje de canal roto. La actualización del paquete de banda ancha de mi ISP hizo que mi conexión interrumpida fuera menos frecuente.
Publiqué mi respuesta aquí, ya que no era una VM de Ubuntu.
ssh -o IPQoS=throughput user@host
Tengo un script en el servidor remoto que nunca parece fallar, independientemente del cliente o servidor de configuración SSH.
#!/bin/bash
while true; do date; sleep 10; done;
Guárdelo en un archivo dummy.sh y ejecútelo rápidamente antes de minimizar la ventana o alejarse de ella. Seguirá imprimiendo la marca de tiempo actual en el servidor y mantendrá su conexión activa siempre que la conexión no se corte por ningún otro motivo. Cuando regrese a esa terminal, simplemente presione CTRL + C y siga trabajando.
top
corriendo
Puede agregar estos argumentos cada vez que invoque ssh: -o ServerAliveInterval=15 -o ServerAliveCountMax=3
No tiene que editar los archivos de configuración / etc / ssh / * si hace esto.
Puede crear un alias bash o una función o script para facilitar esto.
Por ejemplo, estas funciones de bash, puede agregarlas a su .bashrc, do_ssh se usa manualmente para activar keepalives. do_ssh_pty se usa dentro de los scripts para configurar pty y evitar avisos.
do_ssh() {
ssh -o ServerAliveInterval=15 -o ServerAliveCountMax=3 $*
}
do_ssh_pty() {
ssh -tt -o "BatchMode=yes" -o "StrictHostKeyChecking=no" -o ServerAliveInterval=15 -o ServerAliveCountMax=3 $*
}
Ahora do_ssh user@host
se puede usar o do_ssh user@host <args> <command>
y keepalives estará activo.