MaxAuthTries 是 OpenSSH 控制单次连接内最大失败认证次数的参数,设为 3 可平衡可用性与安全,需配合 systemctl reload sshd 生效,并必须搭配 Fail2ban 拦截 IP 才能有效防御暴力破解。

MaxAuthTries 是什么,为什么必须调低MaxAuthTries 是 OpenSSH 服务端配置中控制单次连接内允许失败认证次数的关键参数。它不是“每天最多试3次”,而是一旦某次 SSH 连接过程中用户输错密码(或密钥不匹配)达到该数值,sshd 就立即断开这次 TCP 连接——连提示都不给,直接 Connection closed by remote host。
这个机制能有效打断暴力破解的连续性,尤其配合 Fail2ban 使用时,让攻击者无法在单个连接里反复试不同密码。
- 默认值通常是
6,对公网暴露的服务器来说太高了
- 设为
3 是当前主流推荐值:够普通用户手误重试一次,又大幅压缩爆破窗口
- 不建议设为
1:某些客户端(如旧版 PuTTY 或自动化脚本)可能因密钥代理转发、Kerberos 预认证等流程触发多次 auth 尝试,导致合法登录失败
怎么改 MaxAuthTries?别漏掉 reload 步骤
修改 /etc/ssh/sshd_config 文件后,仅保存不生效。必须让 sshd 重新加载配置,否则所有改动都是纸上谈兵。
- 打开配置文件:
sudo nano /etc/ssh/sshd_config
- 找到或新增一行:
MaxAuthTries 3(确保前面没被 # 注释)
-
关键动作:运行
sudo systemctl reload sshd(Debian/Ubuntu)或 sudo systemctl reload sshd(RHEL/CentOS)
- 验证是否生效:
sudo sshd -T | grep maxauthtries → 应输出 maxauthtries 3
6,对公网暴露的服务器来说太高了 3 是当前主流推荐值:够普通用户手误重试一次,又大幅压缩爆破窗口 1:某些客户端(如旧版 PuTTY 或自动化脚本)可能因密钥代理转发、Kerberos 预认证等流程触发多次 auth 尝试,导致合法登录失败 /etc/ssh/sshd_config 文件后,仅保存不生效。必须让 sshd 重新加载配置,否则所有改动都是纸上谈兵。
- 打开配置文件:
sudo nano /etc/ssh/sshd_config - 找到或新增一行:
MaxAuthTries 3(确保前面没被#注释) -
关键动作:运行
sudo systemctl reload sshd(Debian/Ubuntu)或sudo systemctl reload sshd(RHEL/CentOS) - 验证是否生效:
sudo sshd -T | grep maxauthtries→ 应输出maxauthtries 3
⚠️ 常见错误:用 restart 替代 reload,会中断所有现有 SSH 连接;而 reload 是热重载,平滑无感。
只靠 MaxAuthTries 不够,必须配 Fail2ban 拦 IPMaxAuthTries 只管“单次连接内”,不管“同一个 IP 多次连接”。攻击者只要每次新建连接,就能绕过它。真正起拦截作用的是 Fail2ban 这类工具,它读取 /var/log/auth.log(或 /var/log/secure),发现某 IP 在短时间内触发多次失败认证,就调用防火墙命令封禁。
- 安装并启用 Fail2ban:
sudo apt install fail2ban(Ubuntu/Debian)或 sudo yum install fail2ban(CentOS)
- 启用 sshd jail:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local,然后在 jail.local 中取消注释或添加:enabled = true 下的 [sshd] 段
- 调整封禁策略(可选):
maxretry = 3、bantime = 1h、findtime = 10m
- 重启服务:
sudo systemctl restart fail2ban
sudo apt install fail2ban(Ubuntu/Debian)或 sudo yum install fail2ban(CentOS) sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local,然后在 jail.local 中取消注释或添加:enabled = true 下的 [sshd] 段 maxretry = 3、bantime = 1h、findtime = 10m sudo systemctl restart fail2ban 注意:Fail2ban 默认依赖 iptables,若系统用 nftables(如较新 Ubuntu),需确认其 backend 配置正确,否则封禁无效。
FreeBSD/macOS 用户要额外防认证绕过漏洞
2017 年披露的 OpenSSH 认证绕过漏洞(CVE-2017-15906)影响 FreeBSD 和 macOS 自带的 OpenSSH,攻击者可用 ssh -oKbdInteractiveDevices=`perl -e 'print "pam," x 10000'` 绕过 MaxAuthTries 限制,实现近乎无限次尝试。
- 最稳妥解法:禁用密码登录,强制使用密钥:
PasswordAuthentication no
- 若必须保留密码登录,务必开启认证延时:
LoginGraceTime 30s + PermitEmptyPasswords no
- 确保系统已打补丁:FreeBSD 用户检查
sshd -V 输出是否含 OpenSSH_7.6p1 或更高;macOS 用户应升级到 macOS 10.13.4+
PasswordAuthentication no LoginGraceTime 30s + PermitEmptyPasswords no sshd -V 输出是否含 OpenSSH_7.6p1 或更高;macOS 用户应升级到 macOS 10.13.4+ 这个漏洞至今仍出现在不少老旧嵌入式设备或未更新的 macOS 服务器上,一旦暴露公网,MaxAuthTries 形同虚设。
实际部署时,最容易被忽略的是 reload 与日志路径适配——Fail2ban 的 jail 配置若没指向正确的 auth 日志路径,再严的 MaxAuthTries 也拦不住真实攻击。










