ssh登录异常问题排查

本教程参考chatgpt plus

快速排查思路(实战推荐顺序)

如果你在现场,建议直接按这个顺序来:

  1. 看报错信息
  2. 查日志 /var/log/secure
  3. chage -l(密码过期)
  4. faillock(是否被锁)
  5. passwd -S(账号状态)
  6. 看 sshd_config
  7. 看 home 权限
  8. 看磁盘空间

常见问题总结(经验坑位)

  • 密码过期(最常见)
  • 登录失败被锁
  • shell 被改成 nologin
  • ssh 禁止密码登录
  • home目录权限错误
  • 磁盘满
  • PAM策略限制

用户登录失败 → 排查 + 修复对照表

一、密码过期

🔍 如何判断

1
chage -l username

看到:

1
Password expired

✅ 如何修复

方式1:直接重置密码(最常用)

1
passwd username

方式2:延长密码有效期

1
2
3
4
chage -M 90 username   # 90天过期
chage -M 99999 username # 永不过期
# 用户的账户设为永不过期,同时将其密码的最后修改日期设定为 2026年10月2日,并要求密码每 90 天更换一次
chage -E -1 -d 2026-10-02 -M 90 user

二、账号被锁定

🔍 如何判断

1
passwd -S username

看到:

1
L (Locked)

或:

1
faillock --user username

✅ 如何修复

1
passwd -u username

如果是失败次数锁定:

1
faillock --user username --reset

三、账号过期(不是密码,是账号)

🔍 如何判断

1
chage -l username

看到:

1
Account expires : 日期

✅ 如何修复

取消过期:

1
chage -E -1 username

或设置新日期:

1
chage -E 2026-12-31 username

四、Shell 被禁用(非常常见)

🔍 如何判断

1
cat /etc/passwd | grep username

如果看到:

1
2
/sbin/nologin
/bin/false

✅ 如何修复

1
usermod -s /bin/bash username

五、SSH 禁止登录

🔍 如何判断

1
cat /etc/ssh/sshd_config

检查:

1
2
3
4
PasswordAuthentication no
PermitRootLogin no
AllowUsers
DenyUsers

✅ 如何修复

编辑:

1
vi /etc/ssh/sshd_config

修改为:

1
PasswordAuthentication yes

如限制用户:

1
AllowUsers username

重启服务:

1
systemctl restart sshd

六、Home目录权限错误

🔍 如何判断

1
ls -ld /home/username

错误示例:

1
2
root root
权限过宽或过窄

✅ 如何修复

1
2
chown username:username /home/username
chmod 700 /home/username

七、PAM 限制 / 登录策略

🔍 如何判断

1
faillock --user username

或查看:

1
cat /etc/pam.d/system-auth

✅ 如何修复

清除失败次数:

1
faillock --user username --reset

如果策略太严格,可修改:

1
vi /etc/pam.d/system-auth

例如:

1
deny=5 unlock_time=600

👉 可以调大或关闭


八、磁盘满导致无法登录

🔍 如何判断

1
df -h

看到:

1
100%

✅ 如何修复

清理日志:

1
rm -rf /var/log/*.log

或:

1
journalctl --vacuum-time=3d

九、SELinux 导致登录失败

🔍 如何判断

1
getenforce

如果是:

1
Enforcing

✅ 如何修复(排查用)

临时关闭测试:

1
setenforce 0

如果确认是SELinux问题:

1
vi /etc/selinux/config

改为:

1
SELINUX=disabled

十、日志报错对应修复(重点)

常见日志 & 解决办法

1️⃣

1
Authentication failure

👉 密码错误 / PAM问题
✔ 重置密码 + 检查PAM


2️⃣

1
User not allowed

👉 SSH限制
✔ 修改 AllowUsers


3️⃣

1
Account expired

👉 账号过期
chage -E -1


4️⃣

1
Permission denied

👉 权限问题
✔ 检查 home / shell


🔥 实战快速修复流程(推荐你用这个)

如果你在生产环境,直接按这个顺序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 1. 看日志
tail -f /var/log/secure

# 2. 解锁
faillock --user username --reset
passwd -u username

# 3. 重置密码
passwd username

# 4. 检查过期
chage -l username
chage -E -1 username

# 5. 修复 shell
usermod -s /bin/bash username

# 6. 修复目录
chown -R username:username /home/username
chmod 700 /home/username

# 7. 重启SSH
systemctl restart sshd

如果你现在有具体报错(比如 secure 日志一段),直接贴出来,我可以帮你做到:

👉 一眼定位问题
👉 给你最小改动修复方案(避免误操作)

很多时候其实一条命令就能解决 👍

扩展sssd问题导致

有,而且在接入 LDAP / AD 域 的环境里,SSSD 出问题是非常常见的“登录失败元凶之一”。尤其是你这种做过集群/云平台的环境,更容易踩这个坑。

我帮你把 SSSD 相关排查 + 修复讲清楚,尽量做到你现场可以直接用。


一、什么时候要怀疑 SSSD?

如果你出现这些现象,优先怀疑 SSSD:

  • 只有“域用户”登录失败(本地用户正常)
  • 报错:
    • Authentication failure
    • User not known to the underlying authentication module
  • 登录特别慢(卡10~30秒)
  • 重启后偶尔恢复
  • id username 查不到域用户

二、SSSD 快速判断(三板斧)

1️⃣ 看用户是否能解析

1
id username

👉 正常:能看到 uid/gid
👉 异常:no such user


2️⃣ 看 SSSD 服务状态

1
systemctl status sssd

重点看:

  • 是否 running
  • 是否报错

3️⃣ 直接查 SSSD

1
getent passwd username

👉 这个比 id 更关键
如果查不到,基本就是 SSSD / LDAP 问题


三、常见问题 + 修复方法


❌ 问题1:SSSD服务挂了

🔍 表现

1
systemctl status sssd

看到:

1
inactive / failed

✅ 修复

1
2
systemctl restart sssd
systemctl enable sssd

❌ 问题2:缓存异常(非常常见)

SSSD会缓存用户信息,缓存坏了就会登录失败


🔍 表现

  • 用户之前能登录,现在不行
  • 重启后短暂恢复

✅ 修复(重点!)

1
2
3
4
systemctl stop sssd
rm -rf /var/lib/sss/db/*
rm -rf /var/lib/sss/mc/*
systemctl start sssd

👉 这是最有效的通用修复手段之一


❌ 问题3:无法连接 LDAP / AD


🔍 检查连通性

1
ping 域控IP

或:

1
2
telnet 域控IP 389
telnet 域控IP 636

✅ 修复

  • 检查防火墙
  • 检查 DNS(很关键!)
1
cat /etc/resolv.conf

👉 AD环境 DNS错了基本必挂


❌ 问题4:sssd.conf 配置错误


🔍 检查配置

1
cat /etc/sssd/sssd.conf

重点看:

  • domain 配置
  • ldap_uri
  • ldap_search_base

⚠️ 注意权限

1
chmod 600 /etc/sssd/sssd.conf

否则 SSSD 会拒绝启动


✅ 修改后必须重启

1
systemctl restart sssd

❌ 问题5:时间不同步(隐藏杀手)

👉 AD / Kerberos 强依赖时间


🔍 检查

1
date

✅ 修复

1
ntpdate time.server

或:

1
timedatectl set-ntp true

❌ 问题6:Kerberos 票据问题


🔍 检查

1
kinit username

如果失败 → 认证链路有问题


✅ 修复

  • 检查 /etc/krb5.conf
  • 检查域配置

❌ 问题7:PAM 没接 SSSD


🔍 检查

1
cat /etc/nsswitch.conf

必须包含:

1
2
3
passwd: files sss
shadow: files sss
group: files sss

✅ 修复

编辑后保存即可


四、日志排查(关键)

SSSD日志非常有用:

1
tail -f /var/log/sssd/sssd.log

或:

1
journalctl -u sssd -f

常见报错:

  • Cannot contact LDAP server
  • Authentication failed
  • No such user
  • GSSAPI Error

五、终极一键修复套路(实战常用)

如果你懒得一个个查,可以直接用这套:

1
2
3
4
5
6
7
8
9
10
11
12
# 重启服务
systemctl restart sssd

# 清缓存(关键)
systemctl stop sssd
rm -rf /var/lib/sss/db/*
rm -rf /var/lib/sss/mc/*
systemctl start sssd

# 测试用户
getent passwd username
id username

六、经验总结(踩坑结论)

SSSD问题里最常见 TOP 5:

  1. 缓存坏了(最多)
  2. DNS错误
  3. AD连不上
  4. 时间不同步
  5. sssd.conf权限不对

👉 给你一个判断口诀

本地能登,域用户不能登 → 80% 是 SSSD


如果你现在有:

  • /var/log/sssd/sssd.log 一段日志
  • id / getent 的输出

贴出来,我可以帮你直接定位是哪一类问题,甚至一步到位给你修复命令。