如何在linux服务器安装配置google authenticator二步验证

在Linux服务器上配置Google Authenticator二步验证,核心是让SSH登录强制要求时间动态口令(TOTP),同时保留密码或密钥登录作为第一因素。整个过程不修改系统认证本质,而是通过PAM模块扩展验证流程。

安装Google Authenticator PAM模块

不同发行版命令略有差异,需先确保系统已启用EPEL(CentOS/RHEL)或 universe 源(Ubuntu/Debian):

Ubuntu/Debian:sudo apt update && sudo apt install libpam-google-authenticator CentOS 7/RHEL 7:sudo yum install epel-release && sudo yum install google-authenticator CentOS 8+/RHEL 8+:sudo dnf install google-authenticator

安装后,google-authenticator 命令即可全局使用,无需额外启动服务。

为用户生成并初始化密钥

切勿用 root 直接运行初始化(安全风险高),应以目标登录用户身份执行:

切换到目标用户:sudo -u username bash 运行初始化:google-authenticator 按提示选择:是否启用时间戳(选 y)、是否限制同一口令多次使用(y)、是否启用紧急备用码(y,保存好这5个一次性代码)、是否开启速率限制(y)

执行后会输出二维码(可用手机Google Authenticator扫描)、密钥字符串、验证URL及备用码。密钥和备用码建议离线保存——~/.google_authenticator 文件权限自动设为 0600,切勿改权限。

配置PAM启用TOTP验证

编辑SSH的PAM配置文件,使登录时调用Google Authenticator模块:

打开文件:sudo nano /etc/pam.d/sshd 在文件**顶部**添加一行(顺序很重要):auth [success=ok new_authtok_reqd=ok default=bad] pam_google_authenticator.so nullok nullok 表示该用户未初始化时仍可登录(便于逐步部署);上线后可改为 secret=/home/${USER}/.google_authenticator 并去掉 nullok,强制所有用户启用

注意:不要加 required 或 requisite,否则一旦模块异常会导致所有SSH登录失败。上面的 [success=ok … default=bad] 是推荐的安全跳转逻辑。

调整SSH服务配置并重启

PAM只负责验证逻辑,还需告诉sshd启用键盘交互式认证:

编辑:sudo nano /etc/ssh/sshd_config 确认以下三项为 yes:ChallengeResponseAuthentication yes、UsePAM yes、PasswordAuthentication yes(若用密钥登录,可设为 no,但需确保 PubkeyAuthentication yes) 保存后重载服务:sudo systemctl reload sshd(Ubuntu/Debian)或 sudo systemctl reload sshd(RHEL/CentOS)

此时新SSH连接会先要求输入密码(或密钥),再提示输入6位验证码。若用密钥登录且禁用了密码,验证流程为:密钥 → TOTP。两步缺一不可。

配置完成后建议新开终端测试,保留原会话以防锁死。如遇问题,可临时注释PAM中刚添加的行并重载sshd恢复访问。备用码是唯一应急入口,务必妥善保管。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。