一行命令解决ssh连接自动断开问题

本文介绍了一个通用方法,通过bash脚本定期向ssh终端设备发送特殊字符,以维持ssh连接活跃,避免因空闲超时被服务器自动断开,适用于开发者频繁调试的工作场景。

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

IT开发、运维、调试等工作经常需要ssh登录远程服务器。现在很多ssh server端设置了空闲超时自动断开。例如,人离开大于30分钟无操作,服务器判断空闲时间超过,于是断开连接,其实这很不利于开发调试工作的连续性。用户往往没有服务端配置权限。此外,客户端xshell,putty等的”保持活动状态“功能企图解决这个问题,但不一定能生效。例如,国内使用堡垒机登录的情况越来越普遍,访问一台内部服务器实际都经过了堡垒机的转发,堡垒机判断空闲超时,从而导致ssh”保活“措施对内部服务器不起作用。

这里给出一个通用的解决办法。ssh登录之后,在bash shell环境执行。

while true;do \
  for x in $(ls -1 /dev/pts |grep "^[0-9]");do \
    echo -en "\x07" > /dev/pts/$x;\
  done;\
  sleep 1777;\
done &

查看ssh登录情况,

$ who
root     tty1         2021-01-07 14:38
root     pts/0        2022-01-07 17:55 (192.168.1.3)
root     pts/5        2022-01-07 07:28 (192.168.1.3)
root     pts/6        2022-01-07 17:57 (192.168.1.3)
root     pts/7        2022-01-07 18:26 (192.168.1.3)

其中pts/0,pts/5,pts/6,pts/7都是ssh登录终端设备。

说明:

1. 若要ssh session保持活跃,只要在规定时间间隔内接收到的字节数不为零,则该session不会被服务端认为空闲。

2. 向pts设备随意发送数据会影响ssh终端窗口的显示,例如在一个窗口用wall命令发消息而用户正在其他终端窗口vim编辑文档,在编辑区域会出现广播过来的消息,对用户工作造成一定干扰。为避免该问题,向pts设备发送BEL(振铃),该字符没有任何回显,也就不会把显示搞乱。

3. 设置发送间隔小于服务端设定的空闲间隔。例如,服务端设置半小时自动断开,那么我们设置1777秒是足够的。

4. 如果同时用了expect自动登录,登录之后一般不要改变终端窗口大小,因为expect缺省忽略SIGWINCH信号,窗口size变化导致VIM编辑器排版混乱。

### 配置SSH防止连接超时断开 为了确保SSH连接不会因闲置而被服务器自动断开,在服务器端可以通过调整`sshd_config`文件内的参数来实现这一目标[^2]。 编辑位于`/etc/ssh/sshd_config`路径下的SSH服务配置文件: ```bash sudo nano /etc/ssh/sshd_config ``` 在该文件中查找或添加如下两行配置指令,并根据需求设定合理的数值: - `ClientAliveInterval 120`: 表示每120秒向客户端发送一次心跳信号,用于检测连接状态。 - `ClientAliveCountMax 3`: 当连续三次尝试发送的心跳信号均未能得到回应时,将会终止此次会话。 保存更改后的配置文件并退出编辑器。为了让新的设置生效,需重启SSH服务: ```bash sudo systemctl restart sshd ``` 上述操作能够有效减少由于网络波动或其他因素造成的意外断连情况发生概率,同时也能提高安全性,因为长时间没有任何交互的操作会被及时清理释放资源[^1]。 另外一种方式是在本地机器上的SSH客户端配置中增加ServerAliveInterval选项,这同样有助于维持稳定的远程登录体验。具体做法是在启动SSH会话之前通过命令行指定此参数: ```bash ssh -o ServerAliveInterval=60 user@hostname ``` 这条命令会让客户端每隔60秒钟就给服务器发一个保持活跃的信息包,从而避免因为空闲而导致的连接中断问题[^4]。 对于希望彻底禁用基于时间的自动登出机制的情况,可以在用户的shell初始化脚本(如`.bash_profile` 或 `.profile`)里定义环境变量`TMOUT=0`,以此关闭任何可能存在的超时保护措施[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值