解决ssh远程连接服务器,中断后程序终止运行的情况

通过在Ubuntu服务器上安装并使用screen工具,可以在本地断开SSH连接后保持服务器上的程序继续运行。创建一个screen会话,运行所需代码,即使断开连接,程序也会持续运行。重新连接时,通过screen-rPID可以重新进入会话查看程序状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在使用ssh相关工具远程连接服务器时,会出现本地电脑断开远程连接后,服务器端的程序便停止运行的情况,针对此问题,本篇博客简单的给出了解决方法。此方法的部分步骤仅用于服务器端是ubuntu操作系统,CentOs步骤一致,可能命令不一样。

步骤

step1:在服务器终端安装screen

apt-get install screen

step2:在服务器挂一个屏幕

screen -S your_screen_name

your_screen_name按照你的想法,随便设置,比如我的是:
在这里插入图片描述
输入这一行指令以后,相当于咋们进入了服务器端主机的屏幕,在这里面进行的操作就相当于使用服务器主机的显示器对服务器主机进行操作,就算自己的电脑和服务器断开连接,不会影响服务器主机继续跑代码。
step3:查看对应的PID

screen -ls

我的pid号是:24757
在这里插入图片描述
注意:这个步骤的目的是,可能我们会退出服务器主机的屏幕,退出后状态为Detached:
在这里插入图片描述

下次我可能要跑代码,还会使用这个创建好的屏幕,那么我可以采用以下指令和pid号重新进入此屏幕:

screen -r pid号

我输入的是:

screen -r 24757

进入之后状态为atached,表示已经成功进入服务器主机的屏幕。
注意:采用screen -S your_screen_name创建一个screen时,创建完成就会进入创建的屏幕,对应的状态就是Atached
step4:在进入的屏幕中运行代码
进入的屏幕相当于服务器端对应的主机屏幕,进入后跑代码即可,比如我跑的是深度学习代码,直接输入python train.py即可运行

结束语:采用这种方式,代码在服务器端运行起来后,你可以马上关闭ssh远程服务连接工具,代码仍然在服务器上运行。我们可以验证一下,假如因为什么情况,和服务器的连接已经断开:
在这里插入图片描述
此时咋们重新连接服务器:
在这里插入图片描述
进入我们在服务器终端创建的屏幕screen -r pid号:
在这里插入图片描述
进去之后可以看见我们的代码还在运行:
在这里插入图片描述

### SSH 远程连接中断的原因分析 SSH 远程连接意外终止通常由多种因素引起,主要包括网络不稳定、服务器端超时设置不当以及客户端未正确处理保持活动状态等问题。以下是具体原因及对应的解决方案: #### 1. **网络波动** 网络环境中的丢包或延迟可能导致 SSH 连接被强制关闭。此类问题可以通过调整 SSH 的心跳机制来缓解。 解决方案之一是在客户端的 `~/.ssh/config` 文件中添加以下参数[^2]: ```plaintext Host * ServerAliveInterval 60 TCPKeepAlive yes ``` 参数解释如下: - `ServerAliveInterval`: 设置每隔多少秒向服务器发送一次心跳信号,默认单位为秒。 - `TCPKeepAlive`: 启用底层 TCP Keepalive 功能以维持连接活跃。 --- #### 2. **服务器端超时配置** 如果服务器上的 `/etc/ssh/sshd_config` 文件设置了过短的超时时间,则可能会导致无操作一段时间后连接自动断开。这通常是由于默认的 `ClientAliveInterval` 和 `ClientAliveCountMax` 参数值较低所致。 可通过编辑该文件并增加以下内容解决问题[^3]: ```plaintext ClientAliveInterval 60 ClientAliveCountMax 3 ``` 上述配置表示每分钟向客户端发送一次探针请求,并允许最多三次失败尝试后再切断连接。 编辑完成后需重新启动 sshd 服务使更改生效: ```bash systemctl restart sshd ``` --- #### 3. **防火墙或 NAT 超时** 当使用 NAT 或者某些企业级防火墙设备时,这些中间件可能也会因为长时间没有数据传输而主动释放闲置连接。此时除了优化 SSH 自身的心跳外还需要联系网络管理员确认其策略是否合理。 --- #### 4. **采用会话管理工具 Screen/Tmux** 对于那些即使采取上述措施仍无法完全杜绝掉线风险的任务场景(比如执行耗时较长的操作),建议利用 screen/tmux 工具创建持久化终端会话。这样即便发生短暂离线也不会影响后台运行程序继续工作. 安装方法 (以 CentOS为例): ```bash yum install tmux -y ``` 创建新 session 并命名: ```bash tmux new -s mysessionname ``` 列出当前存在的 sessions : ```bash tmux ls ``` 断开现有连接但保留 session 中的内容不变: ```bash Ctrl+b d ``` 之后可以从任何地方再次接入刚才退出的那个 session: ```bash tmux attach -t mysessionname ``` --- ### 总结 以上介绍了几种常见的 SSH 远程连接异常结束的现象及其对应处置办法。实际应用过程中可根据具体情况选用合适的技术手段加以应对。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值