逗号与空格的含义不同
OpenSSH 的 AuthenticationMethods 用来声明“需要哪几种认证以及顺序”。写 publickey,keyboard-interactive 表示两关都必须通过;写 publickey keyboard-interactive(中间是空格)则表示两种方式任选其一即可。这个差别是把密钥与动态口令组合成真正双因素的关键:若写成空格分隔,用户只提供密钥就能登录,等于 MFA 从未启用。
基本信息
| 适用平台 | Linux(OpenSSH 8.x 及主流版本) |
|---|---|
| 核心配置 | AuthenticationMethods publickey,keyboard-interactive |
| 配合项 | PasswordAuthentication no;KbdInteractiveAuthentication yes |
| 验证命令 | sshd -T | grep -i authenticationmethods |
| 加固项 | 特权入口双因素认证 |
典型使用场景
- 特权入口加固:管理员与运维账号登录必须密钥加动态口令
- 合规要求:等保对重要用户实行两种或以上组合鉴别
- 外包与临时账号:结束合作后即使密钥泄漏也无法单独登录
- 跳板机加固:堡垒机前置双因素,后置按角色授权
- 应急收紧:漏洞爆发期临时要求双因素再进管理网段
服务端配置与验证
服务端配置与验证
grep -E 'AuthenticationMethods|KbdInteractive|PasswordAuth' /etc/ssh/sshd_config
# 建议配置:
# AuthenticationMethods publickey,keyboard-interactive
# PasswordAuthentication no
# KbdInteractiveAuthentication yes
sudo sshd -t && sudo systemctl reload sshd # 先校验语法再重载
sshd -T | grep -i authenticationmethods # 确认最终生效值
ssh -o PreferredAuthentications=password test@host # 应被拒绝
ssh -o PreferredAuthentications=publickey test@host # 应继续要求第二因素取值写法对照
| 写法 | 含义 | 风险 |
|---|---|---|
| publickey,keyboard-interactive | 两种方式都必须通过 | 双因素真正生效 |
| publickey keyboard-interactive | 两者任选其一 | 只提供密钥即可登录,等于没启用 MFA |
| publickey,password | 密钥加系统口令 | 口令须允许认证,通常不推荐 |
| Match 块内单独声明 | 仅对特定用户或网段生效 | 豁免范围过大等于没做 |
密钥加动态口令的组合下,即使私钥被复制也难以登录:代价是每次登录都要动态码,自动化场景应为服务账号配置独立 Match 规则并记录理由。
落地要点
- 变更前先发客户端升级通告:老客户端不支持 keyboard-interactive 会直接登录失败
- 服务账号与自动化流水线走独立 Match 块,避免被双因素挡住导致发布失败
- 重载前保留一个已登录会话,配置写错时不至于完全失联
- 把生效值写进基线报告:sshd -T 的输出才是事实,配置文件里写了不等于生效
- 定期复核 Match 豁免清单,豁免往往是安全洼地
误把空格当逗号是高频事故:配置看起来像启用了双因素,实际任选其一,测评与审计都会判为未落实。