# 查看最近的认证日志
sudo grep "authentication failure" /var/log/auth.log
sudo grep "Failed password" /var/log/auth.log
sudo grep "user" /var/log/secure # 对于RHEL/CentOS系统
# 查看特定用户的登录尝试
sudo grep "username" /var/log/auth.log
# 查看账户是否存在
id username
# 检查账户是否被锁定
sudo passwd -S username
# 检查账户过期信息
sudo chage -l username
# 查看SSH服务是否运行
systemctl status sshd
# 检查SSH配置文件
sudo cat /etc/ssh/sshd_config | grep -v "^#" | grep -v "^$"
# 特别注意以下配置项:
# AllowUsers, DenyUsers, AllowGroups, DenyGroups
# PasswordAuthentication, PermitRootLogin
# 查看PAM认证配置
sudo cat /etc/pam.d/sshd
sudo cat /etc/pam.d/login
sudo cat /etc/pam.d/system-auth
# 重置用户密码
sudo passwd username
# 解锁用户账户
sudo passwd -u username
# 如果使用pam_tally2锁定
sudo pam_tally2 --user=username --reset
# 如果使用faillock (较新系统)
sudo faillock --user username --reset
# 修改账户过期时间
sudo chage -E -1 username # 取消过期
sudo chage -E YYYY-MM-DD username # 设置新的过期日期
# 检查并修改用户shell
sudo usermod -s /bin/bash username
# 检查/etc/nologin文件是否存在
sudo rm -f /etc/nologin # 如果存在且不应该存在
# 修改SSH配置后重启服务
sudo nano /etc/ssh/sshd_config
sudo systemctl restart sshd
设置强密码策略:
sudo nano /etc/pam.d/system-auth
# 添加密码复杂度要求
限制登录尝试次数:
# 在/etc/pam.d/sshd或/etc/pam.d/login中添加
auth required pam_tally2.so deny=5 unlock_time=600
配置账户锁定策略:
sudo nano /etc/security/faillock.conf
定期检查日志:
# 设置日志轮转和监控
sudo nano /etc/logrotate.d/auth
使用SSH密钥认证:
# 生成密钥对并配置
ssh-keygen -t rsa -b 4096
ssh-copy-id username@hostname
通过以上步骤,您应该能够诊断并解决Linux系统中的用户登录失败问题。