引言:在阿里云香港服务器上长期维护 SSH 会话时,经常遇到连接被网络设备或 NAT 空闲超时断开的情况。本文聚焦于通过服务器与客户端的 KeepAlive 和心跳配置来减少 SSH 自动断开,以提高远程运维稳定性和可用性。
SSH 自动断开通常由中间网络(如路由器、负载均衡、NAT)对空闲连接的跟踪表清理导致。阿里云公网或网络层面可能对空闲 TCP 连接设置较短的超时时间,长时间不活跃的 SSH 会话容易被强制关闭,从而影响运维与任务执行。
TCPKeepAlive 是内核层面的 TCP 心跳,由内核发送探测数据包;ServerAliveInterval/ClientAliveInterval 是 SSH 的应用层心跳,分别由客户端与服务端发送应用级消息。通常优先使用 SSH 的应用层心跳更灵活且响应速度更快。
在服务器端调整 /etc/ssh/sshd_config 可以主动检测客户端状态并避免网络超时断开。常用配置示例:ClientAliveInterval 60、ClientAliveCountMax 3、TCPKeepAlive yes。修改后需重启 sshd 生效(systemctl restart sshd)。
/etc/ssh/sshd_config 示例: ClientAliveInterval 60 ClientAliveCountMax 3 TCPKeepAlive yes
客户端通过 ServerAliveInterval 发起心跳更能避免中间设备超时断开。建议在 ~/.ssh/config 中添加:ServerAliveInterval 60、ServerAliveCountMax 3,或在命令行使用 -o ServerAliveInterval=60 来临时生效,适配不同网络环境。
~/.ssh/config 示例: Host * ServerAliveInterval 60 ServerAliveCountMax 3 TCPKeepAlive yes
若需要全局调整,可修改 sysctl 参数:net.ipv4.tcp_keepalive_time、tcp_keepalive_intvl、tcp_keepalive_probes。示例:tcp_keepalive_time=120、tcp_keepalive_intvl=30、tcp_keepalive_probes=5,可通过 sysctl -w 临时修改并写入 /etc/sysctl.conf 持久保存。
针对阿里云香港等公网环境,建议将心跳间隔设置在 30-60 秒区间,ClientAliveCountMax 或 ServerAliveCountMax 设为 3-5,以在不产生过多流量的前提下保障连接稳定。若有大量会话,请评估服务器负载与带宽影响。
若调整后仍有断连,先查看 /var/log/auth.log 或 journalctl -u sshd 的日志定位原因。可考虑使用 autossh 自动重连或 mosh(基于 UDP 的远程终端)作为不可靠网络下的替代方案,提高可用性与恢复能力。
调整心跳参数会增加小量网络流量,避免将间隔设置过短以致大量会话产生负担。修改配置前请在测试环境验证,并确保 SSH 密钥与防火墙规则、入侵检测策略保持一致,避免引入安全风险。
总结:为防止阿里云香港服务器 SSH 自动断开,推荐在服务端配置 ClientAliveInterval/ClientAliveCountMax 并在客户端设置 ServerAliveInterval/ServerAliveCountMax,同时根据需要调整内核 tcp_keepalive 参数。选择合理的心跳间隔(30-60 秒)与重试次数(3-5 次),结合日志排查与必要的自动重连工具,可显著提升 SSH 会话稳定性与运维效率。
建议:先从客户端 ServerAliveInterval 调整开始,再在服务器做对应配置;有大量会话时先在小范围内进行压测;若网络环境极不稳定,可引入 autossh 或 mosh 作为补充方案。