SSH协议本身不支持自动重连,需依赖autossh等外部工具;ServerAliveInterval等配置仅维持心跳、无法触发重连,密钥认证+tmux/screen才是安全可靠的组合方案。

SSH 协议本身不支持自动重连,所谓“自动重连”必须依赖外部工具或脚本,且存在安全与资源风险——这不是配置开关就能解决的问题。
为什么直接改 ssh_config 或 sshd_config 不能实现自动重连
很多人误以为加 ServerAliveInterval 或 ClientAliveInterval 就能“自动重连”,其实它们只控制保活探测(心跳),不是重连逻辑。一旦连接断开,OpenSSH 进程就退出,不会自己拉起来。
-
ServerAliveInterval和ClientAliveInterval的作用是防止中间设备(如光猫、防火墙)因空闲超时切断 TCP 连接 - 设成
ServerAliveCountMax 999并不能“永远不断”,只是把断开阈值拉得极长,反而可能让僵死连接堆积 - 客户端配置
Host *全局启用保活,容易在 NAT 环境下触发设备限速,尤其ServerAliveInterval小于 30 秒时
用 autossh 实现可靠重连(推荐)
autossh 是唯一被广泛验证、轻量且可控的方案,它监控 SSH 进程状态,异常退出后自动重启,并支持隧道场景(如 -D、-L)。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 安装:
sudo apt install autossh(Debian/Ubuntu)、sudo yum install autossh(RHEL/CentOS)、brew install autossh(macOS) - 基本用法:
autossh -M 0 -N -o "ServerAliveInterval=30" -o "ServerAliveCountMax=3" user@host -
-M 0关闭内置监控端口(避免端口冲突),-N表示不执行远程命令,纯维持连接 - 如果用于 SOCKS 代理:
autossh -M 0 -N -D 1080 user@host,断连后会自动重建1080端口监听 - 注意:必须已配好密钥登录,
autossh不处理密码交互,也不应配合sshpass使用(明文密码泄露风险高)
手写 while 循环脚本的风险与适用边界
仅在临时调试、无 autossh 权限、或需定制重试逻辑(如错峰重试)时考虑,但必须规避常见陷阱。
- 错误写法:
while true; do ssh user@host; done—— 断连后旧 shell 进程未清理,新连接不断叠加,最终耗尽服务器连接数 - 正确做法:加
sleep延迟 + 检查进程或端口是否真存活,例如用lsof -i :1080验证ssh -D是否还在监听 - 别名启动要带
&后台运行,且避免写入~/.bashrc导致每次开终端都起一个实例 - 永远不要在脚本里硬编码密码;若必须用密码登录,请先用
ssh-keygen和ssh-copy-id配密钥
真正麻烦的从来不是“怎么重连”,而是重连后如何恢复上下文——tmux 或 screen 才是应对掉线的底层解法。保活参数调得再细,也防不住 TMOUT 变量或终端软件自身的 idle timeout。这些干扰项不排查干净,所有重连都是徒劳。

















