启用SSH双因子认证需安装Google Authenticator PAM模块,配置TOTP验证,编辑/etc/pam.d/sshd添加auth required pam_google_authenticator.so,修改/etc/ssh/sshd_config启用ChallengeResponseAuthentication并设置AuthenticationMethods为keyboard-interactive:pam或publickey,keyboard-interactive:pam,重启sshd服务后用户登录需输入动态验证码,提升安全性。

在Linux系统中启用SSH双因子认证(2FA)能显著提升服务器的安全性。通过结合密码/密钥登录与基于时间的一次性验证码(TOTP),即使凭证泄露,攻击者也难以未经授权访问系统。Google Authenticator是实现这一功能的常用工具,支持TOTP协议,可轻松集成到OpenSSH中。
安装Google Authenticator PAM模块
大多数Linux发行版都提供google-authenticator包,可通过系统包管理器安装。
在Ubuntu/Debian系统上执行:
sudo apt updatesudo apt install libpam-google-authenticator
在CentOS/RHEL或Fedora系统上:
sudo yum install google-authenticator# 或使用dnf(较新版本)
sudo dnf install google-authenticator
为用户配置Google Authenticator
切换到目标用户(通常是需要远程登录的账户)并运行初始化命令:
google-authenticator执行后会提示一系列问题,建议按以下方式选择:
- 是否生成新的密钥? → yes
- 是否更新认证文件? → yes
- 是否禁止多次使用同一令牌? → yes(增强安全性)
- 是否启用速率限制? → yes(防止暴力破解)
完成后会显示一个二维码和一组备用恢复码。使用Google Authenticator App(iOS/Android)扫描二维码添加账户,确保设备时间已同步。
配置PAM以启用双因子认证
编辑SSH服务的PAM配置文件:
sudo nano /etc/pam.d/sshd在文件开头添加以下行:
auth required pam_google_authenticator.so这将要求用户在SSH登录时输入动态验证码。注意不要删除原有的auth行,否则可能影响密码验证流程。
修改SSH配置以启用Challenge-Response认证
编辑sshd_config文件:
sudo nano /etc/ssh/sshd_config确认以下配置项已正确设置:
- ChallengeResponseAuthentication yes
- PasswordAuthentication yes(若使用密码登录)
- PubkeyAuthentication yes(若使用密钥登录)
- AuthenticationMethods keyboard-interactive:pam(关键:启用双因子)
如需更严格控制,可设置为:
AuthenticationMethods publickey,keyboard-interactive:pam
表示必须先通过SSH密钥认证,再输入TOTP验证码。
完成修改后重启SSH服务:
sudo systemctl restart sshd测试双因子登录
打开新终端窗口,尝试SSH登录:
ssh username@your-server如果配置正确,登录过程将提示输入验证码(由Google Authenticator生成的6位数字),而不是直接进入系统。输入正确的动态码后才能成功登录。
若遇到问题,可查看日志定位错误:
sudo tail -f /var/log/auth.log(在CentOS/RHEL中为 /var/log/secure)
基本上就这些。只要步骤清晰,Google Authenticator部署并不复杂,但容易忽略PAM和sshd_config的协同配置。启用后,你的SSH服务就具备了双因子防护能力,极大降低被未授权访问的风险。









