You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSH公钥+谷歌2FA结合IP白名单配置异常:白名单IP登录失败,咨询是否可跳过keyboard-interactive认证

SSH公钥+谷歌2FA结合IP白名单配置异常:白名单IP登录失败,咨询是否可跳过keyboard-interactive认证

兄弟,你这个问题我之前帮朋友排查过类似的,核心是sshd的全局认证方法配置和PAM的IP白名单逻辑没对齐,导致白名单IP登录时踩了坑:

你当前的sshd_config里全局设置了AuthenticationMethods publickey,keyboard-interactive,这意味着不管什么IP,sshd都要求必须完成「公钥认证 + 键盘交互式认证」这两个步骤才行。但白名单IP通过PAM的pam_access.so跳过了谷歌2FA,相当于keyboard-interactive的认证步骤没有实际内容可走,sshd就会认为你没完成全部认证流程,直接报Permission denied (keyboard-interactive)。

答案是可以针对白名单IP单独跳过keyboard-interactive认证,只需要调整sshd_config的配置逻辑,不要用全局的AuthenticationMethods,而是用Match块来区分不同IP段的认证要求,具体操作如下:


第一步:修改/etc/ssh/sshd_config配置

把原来全局的AuthenticationMethods配置删掉,换成基于IP的匹配块,注意Match块必须放在配置文件的最后面,否则会失效:

# 保留基础配置
ChallengeResponseAuthentication yes
UsePAM yes
PasswordAuthentication no  # 建议禁用密码认证,进一步提升安全性

# 针对白名单IP单独设置认证规则
Match Address ###.###.###.###
    AuthenticationMethods publickey  # 只需要公钥认证即可

# 对所有其他IP应用默认规则:公钥+2FA
Match all
    AuthenticationMethods publickey,keyboard-interactive

第二步:验证现有PAM配置(无需修改)

你之前的PAM和access文件配置是没问题的:

  • /etc/pam.d/sshd里通过pam_access.so匹配白名单IP,跳过谷歌2FA
  • /etc/security/access-local.conf的IP白名单规则也正确

第三步:重启sshd服务生效

执行命令重启sshd(根据你的系统选择对应命令):

# 适用于systemd系统(CentOS7+/Ubuntu16.04+等)
systemctl restart sshd

# 适用于SysVinit系统(老版本CentOS/Ubuntu等)
service sshd restart

为什么这样就能解决问题?

调整后,白名单IP登录时,sshd会直接使用publickey单因素认证,不会要求keyboard-interactive步骤;外部IP登录时,才会要求公钥+键盘交互式认证(也就是公钥+谷歌2FA),完美和PAM的逻辑对齐,就不会出现「认证部分成功但权限被拒」的情况了。

你可以先在测试环境验证没问题后,再推到生产环境哦。

备注:内容来源于stack exchange,提问作者GaryB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 13:38:05