4. 认证与授权问题:密码错误排查、密钥对认证失败、多因素认证(MFA)故障
认证授权这块,说白了就是远程控制的「门锁」。
门锁坏了,你技术再好也进不去。我遇到过不少团队,折腾半天网络、防火墙,最后发现是密码敲错了——大写锁定没关。嗯,这种低级错误其实最常见。
4.1 密码错误排查:别急着重置
密码认证失败,系统通常会给你一个「Access Denied」或「Authentication Failed」。但原因可能不止一个。
核心排查思路:先确认是「密码本身不对」还是「密码传输过程出了问题」。
4.1.1 常见原因清单
| 原因分类 | 具体表现 | 排查方向 |
|---|---|---|
| 密码输入错误 | 大小写、特殊字符、空格 | 检查键盘布局、Caps Lock、Num Lock |
| 密码过期 | 提示密码已过期或需要更改 | 检查账户密码策略、LDAP/AD 配置 |
| 账户锁定 | 多次失败后账户被锁 | 查看账户锁定策略、等待解锁或联系管理员 |
| 特殊字符转义 | 密码含 $、!、\ 等字符被 Shell 解释 | 使用单引号包裹密码或转义处理 |
| 编码问题 | 非 ASCII 字符在不同终端编码不一致 | 统一使用 UTF-8,避免中文密码 |
我的习惯:排查密码问题时,我会先在本地用 SSH 客户端手动输入一次密码,看能不能连上。如果本地能连、远程工具连不上,那问题大概率出在工具配置或密码保存方式上。
4.1.2 排查步骤
- 确认密码明文正确性——在安全环境下,用记事本打出密码再复制粘贴,避免手误。
- 检查密码存储方式——有些工具会把密码加密存储,但加密密钥可能变了。我遇到过 TeamViewer 更新后密码失效的情况。
- 查看服务端日志——SSH 看
/var/log/auth.log或/var/log/secure,RDP 看事件查看器。 - 测试密码过期——用
chage -l username查看密码有效期。
我曾经踩过的坑:有一次排查了半小时,最后发现是密码里有个「@」符号,在 URL 里被当成了分隔符。从那以后,我建议密码里尽量别用特殊字符,或者用 SSH 密钥代替密码。
4.2 密钥对认证失败:公钥私钥不匹配
密钥对认证比密码安全,但出问题也更隐蔽。说白了,就是你的私钥和服务端存的公钥对不上。
4.2.1 密钥认证流程
先看下密钥认证的完整流程,这样排查时心里有数。
4.2.2 常见失败原因
- 公钥未正确部署——检查
~/.ssh/authorized_keys文件,确保公钥内容完整、无换行问题。 - 私钥权限过大——SSH 要求私钥文件权限为 600,目录权限为 700。我见过有人把私钥设成 777,SSH 直接拒绝使用。
- 密钥格式不兼容——OpenSSH 和 PuTTY 的密钥格式不同,需要用
puttygen转换。 - known_hosts 冲突——服务端换了密钥后,客户端会报 Host Key Verification Failed。
排查命令速查:
# 检查私钥是否有效
ssh-keygen -y -f ~/.ssh/id_rsa
# 检查 authorized_keys 格式
cat ~/.ssh/authorized_keys
# 调试模式查看详细错误
ssh -vvv user@host
# 清除 known_hosts 中的旧记录
ssh-keygen -R hostname
我个人习惯:每次部署新服务器,我都会先跑一遍 ssh-copy-id 来复制公钥。手动复制容易漏掉换行符,尤其是从 Windows 复制到 Linux 时。
4.3 多因素认证(MFA)故障
MFA 现在是标配了。但加了 MFA 之后,排查复杂度直接翻倍。你想想看,本来只查一个密码,现在要查密码 + 动态码 + 可能还有设备问题。
4.3.1 MFA 故障分类
| 故障类型 | 典型现象 | 排查重点 |
|---|---|---|
| 时间不同步 | 动态码总是无效 | 检查客户端和服务端 NTP 时间同步 |
| 设备丢失/更换 | 无法生成动态码 | 使用备用恢复码或联系管理员重置 |
| 推送通知不达 | 手机收不到 MFA 推送 | 检查网络连接、VPN、推送服务状态 |
| 短信延迟/丢失 | 收不到验证码短信 | 检查手机信号、短信拦截、运营商问题 |
| MFA 配置错误 | 绑定失败或无法注册 | 检查密钥种子、二维码扫描、手动输入 |
4.3.2 时间同步问题详解
这是 MFA 故障里最常见的原因。TOTP(基于时间的一次性密码)依赖客户端和服务端的时间一致。偏差超过 30 秒就会失败。
我曾经遇到的情况:有一次客户说 MFA 突然全部失效,排查了所有配置都没问题。最后发现是服务器 NTP 服务挂了,时间慢了 5 分钟。重启 NTP 后立刻恢复。从那以后,我把 NTP 监控加到了日常巡检里。
排查步骤:
- 在服务端执行
date查看当前时间。 - 在客户端(手机/电脑)查看时间,对比差异。
- 检查 NTP 服务状态:
systemctl status ntp或chronyc sources。 - 如果时间偏差大,手动同步:
ntpdate -u pool.ntp.org。
4.3.3 恢复码与备用方案
每个 MFA 系统都应该有备用方案。我建议在配置 MFA 时,第一时间保存恢复码。
最佳实践:
- 保存至少 2 个恢复码,放在安全的地方(密码管理器或保险柜)。
- 配置备用 MFA 设备(比如两部手机都绑定同一个账号)。
- 设置管理员绕过机制,但要有审计日志。
4.3.4 推送通知故障
推送通知依赖 Google Play Services 或 Apple Push Notification Service。如果手机连了公司 VPN,可能会阻断推送通道。
排查思路:
- 关闭 VPN 再试一次。
- 检查手机是否开启了「专注模式」或「免打扰」。
- 查看 MFA 应用的网络权限是否被限制。
- 尝试切换到 TOTP 模式(如果应用支持)。
我的建议:对于关键系统,我倾向于使用 TOTP 而不是推送通知。TOTP 不依赖网络,只要时间同步就能用。推送通知虽然方便,但多了一层网络依赖,出问题的概率更大。
4.4 综合排查流程
遇到认证问题,别慌。按这个流程走一遍,大部分问题都能定位。
最后说一句:认证问题排查,80% 都是低级错误。先检查时间、权限、大小写,别一上来就怀疑系统配置。我见过太多人花几个小时折腾复杂配置,最后发现是密码里多了个空格。