Linux服务器SSH配置MFA需满足OpenSSH≥6.2、启用PAM并正确集成模块;Duo支持多方式验证且有免费版,Authy不适用因无标准PAM模块;推荐Google Authenticator方案实现轻量TOTP验证。

在 Linux 服务器上为 SSH 配置 Duo Security 或 Authy 类型的多因素认证(MFA),核心目标是:在用户通过密钥或密码登录后,强制追加第二层验证。这不是简单装个包就能生效,而需同时满足 OpenSSH 版本、PAM 集成、服务端策略三方面条件。
Duo Security 部署关键步骤
适用于生产环境,支持推送通知、短信、电话、TOTP 等多种验证方式,免费版支持最多 10 名用户。
- 注册 Duo 帐户并创建 “Unix” 类型应用,获取三项凭证:集成密钥(ikey)、秘密密钥(skey)、API 主机名(api_host)
- 在服务器安装
pam_duo模块:Debian/Ubuntu 运行sudo apt install libduo2;RHEL/CentOS 使用yum install duo-unix或从源码编译 - 确认 OpenSSH 版本 ≥ 6.2 且启用 PAM:运行
sshd -V | grep authenticationmethods,若无输出则需升级或换发行版;检查/etc/ssh/sshd_config中含UsePAM yes - 编辑
/etc/pam.d/sshd,在 auth 段添加(位置很重要):auth [success=ok default=bad] pam_duo.so ikey=YOUR_IKEY skey=YOUR_SKEY host=YOUR_API_HOST - 配置 SSH 强制双因素:在
sshd_config中设AuthenticationMethods publickey,keyboard-interactive(密钥+交互式流程),避免仅用password导致绕过 - 为管理员留安全后门:用
Match Group admin分组,对运维组禁用 Duo,普通用户组启用,防止全员锁死
Authy 不适合直接用于 SSH 服务端
Authy 是面向终端用户的 TOTP/SMS 推送客户端,本身不提供标准 PAM 模块或服务端 SDK。它无法像 Duo 那样与 Linux PAM 直接集成用于 SSH 登录控制。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- Authy 官方未发布
pam_authy.so或兼容接口,社区也无稳定、维护中的开源实现 - 部分开发者尝试逆向 Authy 协议提取 TOTP 密钥,但该方式违反服务条款、存在合规风险,且依赖账户绑定状态,不可靠
- 若需类似体验,推荐改用标准 OATH-TOTP 方案:部署
libpam-google-authenticator,用户扫码绑定 Google Authenticator / Authy / Microsoft Authenticator 等任意兼容 App - 注意:
google-authenticator仅提供 TOTP,不支持推送通知;如需推送,仍应回归 Duo 或自建 Radius + MFA 网关
替代方案:Google Authenticator + PAM(轻量可靠)
适合中小团队快速落地,无需外部服务依赖,所有逻辑在本地完成。
- 安装模块:
sudo apt install libpam-google-authenticator(Debian)或yum install google-authenticator(RHEL) - 用户自行初始化:
google-authenticator -t -d -f -r 3 -R 30 -w 3(启用时间令牌、禁用重用、写入 ~/.google_authenticator) - 配置
/etc/pam.d/sshd添加:auth required pam_google_authenticator.so nullok(nullok允许未配置用户跳过,便于逐步 rollout) - 配合 SSH 设置:
ChallengeResponseAuthentication yes和AuthenticationMethods publickey,keyboard-interactive - 提醒用户备份密钥和备用码,并定期轮换 TOTP 秘钥
验证与排错要点
配置完成后务必逐项验证,避免上线即中断访问。
- 先用
sshd -t检查配置语法;再用sudo systemctl restart ssh(或sshd)重载服务 - 开新终端测试,不要关闭当前会话;观察
/var/log/auth.log是否记录pam_duo或pam_google_authenticator调用及失败原因 - 常见失败点:PAM 行顺序错误导致被
pam_permit.so覆盖、SELinux 阻止模块加载(RHEL)、keyboard-interactive未启用、用户家目录权限过松(~/.google_authenticator必须 0600) - 临时禁用 MFA:注释掉 PAM 行并重启 sshd,或使用 Match 规则隔离测试账号

















