linux限制ssh最大密码重试次数本质是限制单次会话内错误密码尝试上限,通过sshd_config中maxauthtries配置(如设为3),输错达限时立即断开当前连接,不累计、不锁账号;需区分pam账户锁定和fail2ban的ip封禁机制。

Linux 限制 SSH 服务的最大密码重试次数,本质是限制用户在一次登录会话中允许输入错误密码的次数上限(即“输错几次后直接拒绝本次连接”,而非累计锁定账号)。这与“失败 N 次后锁定账户”是两个不同层面的控制,需区分配置:
✅ 1. 限制单次登录会话中的密码尝试次数(MaxAuthTries)
这是最直接对应“最大密码重试次数”的配置项,作用于 单次 SSH 连接过程内。
- 默认值通常为
6(OpenSSH 8.2+),表示用户最多可连续输错 6 次密码,第 7 次尝试前连接就会被服务器主动关闭。 - 修改
/etc/ssh/sshd_config:sudo nano /etc/ssh/sshd_config
找到或添加这一行(取消注释并设为 3):
MaxAuthTries 3
- 保存后重启 SSH 服务生效:
sudo systemctl restart sshd
⚠️ 注意:
- 此参数只影响当前 TCP 连接内的交互次数,不记录历史、不锁定账号、不触发 PAM 计数;
- 用户断开重连后,计数重置,仍可再试最多 3 次;
- 它防的是“单次穷举”,不是防暴力破解(后者需结合账户锁定或 fail2ban)。
✅ 2. 配合 PAM 实现失败累计锁定(如 pam_tally2 或 pam_faillock)
若目标是“连续输错 3 次就暂时锁账号”,需启用 PAM 模块,且必须正确配置 /etc/pam.d/sshd:
-
编辑文件:
sudo nano /etc/pam.d/sshd
-
在
auth段最开头插入(确保在pam_unix.so之前):auth [default=die] pam_faillock.so preauth silent deny=3 unlock_time=300 auth [default=die] pam_faillock.so authfail deny=3 unlock_time=300 auth [default=success] pam_faillock.so authsucc
✅ 推荐用
pam_faillock(RHEL/CentOS 7+/Debian 10+ 默认替代pam_tally2),更安全、支持更多策略。 -
同时确认
/etc/ssh/sshd_config中启用了密码认证(否则 PAM 不触发):PasswordAuthentication yes
生效后:同一用户 5 分钟内累计输错 3 次 → 账号被锁 300 秒,期间所有登录(含 SSH、console)均拒绝。
✅ 3. 补充防护:用 fail2ban 封禁 IP(推荐用于生产环境)
MaxAuthTries 和 PAM 锁账号都作用于用户维度,而 fail2ban 是从网络层封禁恶意 IP,更适合对抗分布式暴力破解:
- 编辑
/etc/fail2ban/jail.local:[sshd] enabled = true maxretry = 3 bantime = 3600 findtime = 600
- 日志路径需匹配系统(CentOS 用
/var/log/secure,Ubuntu 用/var/log/auth.log); - 启动服务:
sudo systemctl enable --now fail2ban
这样,任意 IP 在 10 分钟内失败 3 次 → 被 iptables 封 1 小时。
❌ 常见误区澄清
-
LoginGraceTime:是登录会话的总超时时间(如 60 秒内没完成认证就断开),不是“重试次数”; -
ServerAliveInterval/ConnectTimeout:控制连接保活或建连超时,和密码输入无关; -
autossh/ shell 循环:解决的是客户端自动重连问题,不是服务端限制重试。
实际部署建议组合使用:MaxAuthTries 3(防单次试探) + pam_faillock(防账号爆破) + fail2ban(防 IP 扫描),三层防御更稳妥。











