本文详细介绍如何配置SSH会话超时自动续连功能,涵盖服务端/客户端双向设置、TCP Keepalive机制调优以及Tmux/Screen等会话保持方案,帮助运维人员解决网络不稳定环境下的SSH断连问题。
一、SSH超时断线原因分析
默认情况下,SSH会话在无操作时会因以下原因断开:
- TCP连接空闲超时(通常30分钟)
- 中间网络设备(如防火墙/NAT)会话表项过期
- 服务端
ClientAliveInterval
未配置
二、服务端配置方案
1. 修改sshd_config核心参数
编辑SSH服务端配置
sudo vim /etc/ssh/sshd_config
添加以下参数(数值单位为秒)
ClientAliveInterval 60 每60秒发送一次保活探测
ClientAliveCountMax 3 最多发送3次未响应后断开
2. 重载SSH服务
适用于Systemd系统
sudo systemctl reload sshd
检查配置是否生效
sshd -T | grep alive
三、客户端优化方案
1. SSH客户端配置
~/.ssh/config 永久配置
Host
ServerAliveInterval 45
ServerAliveCountMax 2
TCPKeepAlive yes
2. 命令行临时设置
ssh -o ServerAliveInterval=30 user@host
四、高级会话保持方案
1. Tmux会话管理
安装tmux
sudo apt install tmux Debian/Ubuntu
基础使用命令
tmux new -s mysession 新建会话
tmux attach -t mysession 重连会话
2. Screen工具方案
screen -S session_name 创建新会话
Ctrl+a d 分离会话
screen -r session_name 恢复会话
五、网络层优化
调整系统TCP Keepalive参数:
/etc/sysctl.conf 追加
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 60
立即生效
sysctl -p
六、方案验证与测试
- 使用
telnet host 22
测试端口连通性 - 通过
tcpdump -i eth0 port 22
观察保活包 - 使用
timeout 300 ssh user@host
模拟超时
通过以上配置组合,可显著提升SSH会话稳定性。建议根据实际网络环境调整时间参数,平衡资源消耗与连接可靠性。
评论