VS Code连接后长时间未操作,连接自动断开
问题现象
VS Code SSH连接后,长时间未操作,窗口未关闭,再次使用发现VS Code在重连环境,无弹窗报错。左下角显示如下图:
查看VS Code Remote-SSH日志发现,连接在大约2小时后断开了:
原因分析
用户SSH交互操作停止后一段时间,防火墙对空闲链接进行了断开操作,SSH默认配置中不存在超时主动断连的动作,但是防火墙会关闭超时空闲连接(参考:http://bluebiu.com/blog/linux-ssh-session-alive.html),后台的实例运行是一直稳定的,重连即可再次连上。
解决方法
如果想保持长时间连接不断开,可以通过配置SSH定期发送通信消息,避免防火墙认为链路空闲而关闭。
- 客户端配置(用户可根据需要自行配置,不配置默认是不给服务端发心跳包),如图1,图2所示。
配置信息示例如下:
Host ModelArts-xx …… ServerAliveInterval 3600 # 增加这个配置,单位是秒,每1h向服务端主动发个包 ServerAliveCountMax 3 # 增加这个配置,3次发包均无响应会断开连接
比如防火墙配置是2小时空闲就关闭连接,那客户端配置ServerAliveInterval小于2小时(比如1小时),就可以避免防火墙将连接断开。
- 服务器端配置(Notebook当前已经配置,24h应该是长于防火墙的断连时间配置,该配置无需用户手工修改,写在这里仅是帮助理解ssh配置原理)配置文件路径:/home/ma-user/.ssh/etc/sshd_config
每24h向client端主动发个包,3次发包均无响应会断开连接
参考:https://unix.stackexchange.com/questions/3026/what-do-options-serveraliveinterval-and-clientaliveinterval-in-sshd-config-d
- 对于业务有影响的需要进行长链接保持的场景,尽量将日志写在单独的日志文件中,将脚本后台运行,例如:
nohup train.sh > output.log 2>&1 & tail -f output.log