通过配置 pam 的 pam_tally2.so 模块可以限制 ssh 登录失败次数。在 /etc/pam.d/sshd 文件中添加 auth required pam_tally2.so deny=5 unlock_time=300,当用户连续输错 5 次密码后,账户将被锁定 300 秒。

如何查看当前用户的登录失败记录
使用 pam_tally2 --user username 命令可以查询指定用户的登录失败统计信息。该工具会显示尝试次数、当前锁定状态以及上次失败的时间戳,帮助管理员确认是否触发了锁定机制。

如何手动解锁被锁定的账户
若需立即解除锁定,可使用 pam_tally2 --user username --reset 重置计数器。此操作不会修改系统密码,仅清除 PAM 模块记录的失败计数,使账户恢复正常的登录验证流程。
#!/bin/bash
# 检查 sshd 服务状态
service ssh status
# 备份 PAM 配置文件
cp /etc/pam.d/sshd /etc/pam.d/sshd.bak
# 添加 pam_tally2 规则到 /etc/pam.d/sshd
echo "auth required pam_tally2.so deny=5 unlock_time=300" >> /etc/pam.d/sshd
# 重启 sshd 服务以生效
service ssh restart
# 测试:模拟错误登录并查看结果
for i in {1..6}; do
echo "wrong_password" | sshpass -p "wrong_password" ssh user@localhost
pam_tally2 --user user
done
预期输出:
前 5 次登录返回 Permission denied (publickey,password)。
第 6 次登录同样返回 Permission denied,但 pam_tally2 显示 tally: 6 且账户处于锁定状态。
执行 pam_tally2 --user user --reset 后,tally 值归零,账户可正常登录。
基于程序中某个输入、条件或结果的具体问题
当 unlock_time 设置为 0 时,账户将永久锁定直到管理员手动重置。这是由 pam_tally2 的设计决定的,若未设置解锁时间,锁定状态将持续存在,除非显式调用 --reset 参数清除计数。










