Linux中SSH服务端无“最大连接重试次数”配置,因sshd不主动重试;实际需区分:一、MaxAuthTries限制单连接内认证失败次数;二、Fail2ban实现IP级封禁;三、客户端用autossh或脚本实现重连。

Linux 中 SSH 服务本身不提供“最大连接重试次数”配置项。这个说法容易引起误解——SSH 协议和 OpenSSH 实现中,服务端(sshd)从不主动重试连接,它只被动监听、接受新连接;而客户端(ssh 命令)默认也不会自动重试失败的连接。
真正需要区分清楚的是三类不同场景下的“重试”行为:
一、单次连接内的认证尝试次数(防暴力破解)
这是最常被误称为“重试次数”的配置,实际控制的是:**同一 TCP 连接建立后,允许用户最多输错几次密码/密钥**。 在 `/etc/ssh/sshd_config` 中设置:
MaxAuthTries 3
LoginGraceTime 60
- `MaxAuthTries 3`:该连接内最多 3 次认证失败即断开(默认就是 3) - `LoginGraceTime 60`:从 TCP 连接建立起,只有 60 秒登录窗口,超时自动关闭
✅ 修改后需运行:sudo systemctl restart sshd
二、IP 级高频失败封禁(真正防重试攻击)
攻击者可不断新建连接绕过 `MaxAuthTries`,所以必须配合 Fail2ban 这类工具做 IP 封禁: 编辑 `/etc/fail2ban/jail.local`,确保有:
[sshd]
enabled = true
maxretry = 3
findtime = 600
bantime = 3600
- 10 分钟内(600 秒)同一 IP 失败 3 次 → 封禁 1 小时 - 封禁动作由防火墙(iptables/nftables)执行,非 SSH 自身逻辑
✅ 启用命令:sudo systemctl enable --now fail2ban
三、客户端自动重连(需外部工具,非 SSH 内置)
如果你想要的是“连不上就反复重试直到成功”,那得靠客户端侧方案: - ✅ 推荐 autossh(健壮、后台常驻):
autossh -M 0 -o ServerAliveInterval=30 -o ServerAliveCountMax=3 user@host
它会持续重连,但**不内置“最多试 N 次”开关**;如需限制,得套 shell 脚本计数。
- ✅ 简单脚本有限重试(适合一次性任务):
设置 ConnectTimeout=10 防卡死,再用 while 循环 + sleep 控制次数
为什么没有 server-side retry 参数?
SSH 是无状态连接协议:服务端不维护“重试上下文”,也不跟踪“这是第几次连”。每个新 TCP 握手都是独立请求。所谓“重试”,本质是客户端或中间工具发起的新连接,服务端只负责响应。
不复杂但容易忽略。











