Debian 12下如何配置SSH仅通过Google Authenticator验证登录,禁用密码认证?
Debian 12下如何配置SSH仅通过Google Authenticator验证登录,禁用密码认证?
我来帮你解决这个问题!在Debian 12上配置SSH仅用Google Authenticator验证,核心是要同时搞定SSH服务本身的认证开关和PAM的规则配置,你之前的设置还差了几个关键步骤,具体操作如下:
1. 调整SSH服务配置(sshd_config)
首先要让SSH服务本身彻底禁用密码登录,同时启用交互式验证(Google Authenticator属于这类验证):
- 编辑
/etc/ssh/sshd_config文件,确保以下配置项正确设置:PasswordAuthentication no KbdInteractiveAuthentication yes UsePAM yes提示:如果你的OpenSSH版本偏旧,可能还需要加上
ChallengeResponseAuthentication yes,不过Debian 12自带的OpenSSH 9.2p1已经用KbdInteractiveAuthentication替代了前者,不加也没问题。 - 保存文件后,重启SSH服务让配置生效:
sudo systemctl restart sshd
2. 修正PAM认证规则(/etc/pam.d/sshd)
你之前的问题大概率出在这里:默认的PAM配置里会引入系统通用的密码认证规则,即使你注释了common-password,common-auth里的规则还是会触发密码提示。需要做以下调整:
- 编辑
/etc/pam.d/sshd文件,先注释掉默认的通用认证引入行:#@include common-auth - 然后只保留Google Authenticator的认证规则,建议用
required而非sufficient,确保必须通过该验证才能登录:auth required pam_google_authenticator.so
3. 确认用户已生成Google Authenticator密钥
别忘了每个需要通过SSH登录的用户,都必须在本地执行过google-authenticator命令,生成对应的验证密钥并完成手机端的绑定。如果之前没做过,执行命令后按照提示一步步设置即可(比如是否允许复用验证码、是否生成紧急备用码等)。
测试验证
现在用另一台机器尝试SSH登录你的Debian服务器,应该只会提示你输入Google Authenticator的动态验证码,而不会再要求输入密码了。如果还有问题,可以查看SSH服务的日志排查:
sudo journalctl -u sshd
备注:内容来源于stack exchange,提问作者raindog308
相关产品推荐
相关产品推荐

