Google Authenticator双因子认证需先安装PAM模块,用户单独生成密钥并扫码绑定,再配置PAM和SSH服务启用挑战响应认证,最后重启sshd生效。

安装 Google Authenticator PAM 模块
在 CentOS/RHEL 系统上运行:
yum install google-authenticator -y
Ubuntu/Debian 系统使用:
apt update && apt install libpam-google-authenticator -y
安装完成后,普通用户需自行生成密钥(root 用户不建议直接配置,应为每个登录用户单独设置)。
为用户生成并绑定验证码密钥
切换到目标用户(如 john),执行:
google-authenticator
按提示选择:
• 是否启用时间同步模式(推荐选 y)
• 是否限制每30秒只能验证一次(选 y)
• 是否延长窗口期容忍时钟偏差(可选 y)
• 是否启用失败尝试保护(建议 y)
执行后会输出二维码、密钥、备用验证码,并自动写入 ~/.google_authenticator 文件。用手机 Google Authenticator App 扫码添加账户即可。
配置 SSH 使用双因子认证
编辑 PAM 配置文件:
sudo vi /etc/pam.d/sshd
在文件开头添加一行(注意顺序,放在 auth [success=done] pam_unix.so 之后、auth required pam_deny.so 之前):
auth [success=ok new_authtok_reqd=ok default=bad] pam_google_authenticator.so nullok
其中 nullok 表示允许尚未配置 GA 的用户暂时跳过;上线前应改为 secret=/home/$USER/.google_authenticator 并去掉 nullok,确保强制启用。
修改 SSH 服务支持键盘交互认证
编辑 SSH 主配置:
sudo vi /etc/ssh/sshd_config
确认以下三项已启用或设置为 yes:
• ChallengeResponseAuthentication yes
• UsePAM yes
• PasswordAuthentication no(可选,禁用密码后仅允许密钥+GA登录)
保存后重启服务:
sudo systemctl restart sshd
建议先保留一个已登录的终端,避免配置错误锁死自己。

















