Debian 12下如何为带密码短语的SSH密钥启用Google Authenticator(TOTP)多因素认证
Debian 12下如何为带密码短语的SSH密钥启用Google Authenticator(TOTP)多因素认证
兄弟,我太懂你现在的懊恼了——本来想给普通用户david的SSH登录配上双因素认证,结果不小心用root账户跑了google-authenticator,白忙活一场对吧?别慌,咱们一步步把配置掰回正轨,让你的SSH登录既能用「密钥+密码短语」,又能加上Google Authenticator的TOTP验证,安全性拉满。
第一步:给普通用户david正确配置Google Authenticator
首先得切换到david账户操作(如果当前是root,就用su - david切换;或者直接用SSH登录david账户):
- 先安装Google Authenticator的PAM包:
sudo apt update && sudo apt install libpam-google-authenticator - 运行配置命令:
跟着提示一步步选就行,我给你划重点:google-authenticator- 问是否生成新密钥?选
y,之后会弹出二维码、密钥串、当前验证码和5个应急码,应急码一定要存到安全的地方,万一手机丢了全靠它登录。 - 问是否更新
~/.google_authenticator文件?选y - 问是否禁止重复使用验证码?选
y,避免被重放攻击 - 问是否允许时间偏移容错?选
y,防止设备时间不同步导致验证失败 - 问是否限制登录尝试次数?选
y,防止暴力破解
- 问是否生成新密钥?选
第二步:配置PAM模块让SSH调用双因素验证
编辑SSH对应的PAM配置文件:
sudo nano /etc/pam.d/sshd
- 找到
@include common-auth这一行,在前面加#注释掉它(我们不需要系统密码验证,只留密钥+TOTP) - 在文件末尾添加一行:
auth required pam_google_authenticator.so
第三步:修改SSH服务配置,指定认证流程
打开SSH配置文件:
sudo nano /etc/ssh/sshd_config
确保以下几个关键参数设置正确:
ChallengeResponseAuthentication yes(必须打开,TOTP属于挑战响应式认证)AuthenticationMethods publickey,keyboard-interactive(指定登录顺序:先验证SSH密钥的密码短语,再验证TOTP验证码,顺序别搞反)- 你之前加的针对
david的规则可以保留,确保它和上面的设置不冲突:Match User david PasswordAuthentication no
保存退出后,重启SSH服务让配置生效:
sudo systemctl restart sshd
第四步:测试登录
从你的iMac上运行ssh david@192.168.4.7,现在会先要求你输入SSH密钥的密码短语,输入正确后,会接着提示你输入Google Authenticator生成的6位验证码,验证通过就能顺利登录啦!
对了,你之前在root下运行的google-authenticator只会给root账户配置双因素,对david没用,如果不需要root的双因素,直接删掉/root/.google_authenticator文件就行。
备注:内容来源于stack exchange,提问作者ZPMMaker




