¿Qué hago para una conexión de VS Code desconectada automáticamente si no se realiza ninguna operación durante mucho tiempo?
Síntoma
Después de establecer una conexión de SSH a través del VS Code, no se realiza ninguna operación durante mucho tiempo y la ventana se mantiene abierta. Cuando se utiliza de nuevo la conexión, se encuentra que la conexión está desconectada y no se muestra ningún mensaje de error.
De acuerdo con los logs de VS Code Remote-SSH, la conexión se desconectó aproximadamente dos horas después de la configuración.
Causa posible
Después de que la interacción de SSH se detenga durante un período de tiempo, el servidor de seguridad desconecta las conexiones inactivas (http://bluebiu.com/blog/linux-ssh-session-alive.html). La configuración de SSH predeterminada no conduce a una desconexión proactiva tras el tiempo de espera. Dado que la instancia se ejecuta de forma estable en el backend, configure la conexión de nuevo para resolver este problema.
Solución
Para conservar las conexiones si no se realiza ninguna operación durante mucho tiempo, configure el envío periódico de mensajes con SSH. De esta manera, la conexión no quedará inactiva en el firewall.
- Configure el cliente según sea necesario. Si el cliente no está configurado, no se enviará ningún paquete de latidos al servidor de forma predeterminada.
Figura 1 Abrir el archivo de configuración de SSH de VS Code
Figura 2 Adición de configuraciones
La configuración es la siguiente:
Host ModelArts-xx ... ServerAliveInterval 3600 # Add this configuration in the unit of second, indicating that the client will actively send a heartbeat packet to the server every hour. ServerAliveCountMax 3 # Add this configuration, indicating that if the server does not respond after the heartbeat packet is sent for three times, the connection will be disconnected.
Por ejemplo, si el firewall está configurado para desconectar una conexión si la conexión está inactiva durante dos horas, establezca ServerAliveInterval en un valor inferior a dos horas (por ejemplo, una hora) en el cliente para evitar que el firewall desconecte la conexión.
- Configure el servidor de /home/ma-user/.ssh/etc/sshd_config (Se ha configurado el notebook y 24 horas es más que el tiempo configurado en el firewall para desconectar las conexiones. Esta configuración no necesita modificarse manualmente. Solo se utiliza para ayudar a entender la configuración de SSH.)
La configuración anterior muestra que el servidor envía activamente un paquete de latido al cliente cada 24 horas, y la conexión se desconectará si el cliente no responde después de que el paquete de latido se envíe tres veces.
Para obtener más información, véase https://unix.stackexchange.com/questions/3026/what-do-options-serveraliveinterval-and-clientaliveinterval-in-sshd-config-d.
- Si una conexión debe conservarse consistentemente, es una buena práctica escribir logs en un archivo de log separado y ejecutar el script en el backend. Por ejemplo:
nohup train.sh > output.log 2>&1 & tail -f output.log