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 排查步骤

  1. 确认密码明文正确性——在安全环境下,用记事本打出密码再复制粘贴,避免手误。
  2. 检查密码存储方式——有些工具会把密码加密存储,但加密密钥可能变了。我遇到过 TeamViewer 更新后密码失效的情况。
  3. 查看服务端日志——SSH 看 /var/log/auth.log 或 /var/log/secure,RDP 看事件查看器。
  4. 测试密码过期——用 chage -l username 查看密码有效期。

我曾经踩过的坑:有一次排查了半小时,最后发现是密码里有个「@」符号,在 URL 里被当成了分隔符。从那以后,我建议密码里尽量别用特殊字符,或者用 SSH 密钥代替密码。

4.2 密钥对认证失败:公钥私钥不匹配

密钥对认证比密码安全,但出问题也更隐蔽。说白了,就是你的私钥和服务端存的公钥对不上。

4.2.1 密钥认证流程

先看下密钥认证的完整流程,这样排查时心里有数。

SSH 密钥对认证流程 客户端(私钥) 服务端(公钥) 1. 发起连接请求 2. 发送挑战(随机数) 3. 用私钥签名挑战 4. 用公钥验证签名 验证通过 → 建立会话

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 监控加到了日常巡检里。

排查步骤:

  1. 在服务端执行 date 查看当前时间。
  2. 在客户端(手机/电脑)查看时间,对比差异。
  3. 检查 NTP 服务状态:systemctl status ntp 或 chronyc sources。
  4. 如果时间偏差大,手动同步: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 综合排查流程

遇到认证问题,别慌。按这个流程走一遍,大部分问题都能定位。

认证问题综合排查流程 认证失败 使用密码还是密钥? 密码认证 检查大小写/特殊字符 检查密码过期/锁定 查看服务端日志 密钥认证 检查私钥权限/格式 检查 authorized_keys 检查 known_hosts 是否启用 MFA? 检查时间同步/推送/恢复码

最后说一句:认证问题排查,80% 都是低级错误。先检查时间、权限、大小写,别一上来就怀疑系统配置。我见过太多人花几个小时折腾复杂配置,最后发现是密码里多了个空格。