SSH 身份验证:(公钥 xor 密码)+ google 身份验证器代码

SSH 身份验证:(公钥 xor 密码)+ google 身份验证器代码

我正在使用 Debian bullseye。我尝试设置 SSH 两种类型的登录:

  1. 密码 + Google Authenticator 的代码(如果用户设置,则为“nullok”选项),
  2. 来自 Google Authenticator 的公钥 + 代码(如果用户设置了,则为“nullok”选项)。

类型 #1 对我来说是可行的。在类型 #2 中,我有公钥 + 密码(不是公钥密码)+ 来自 GA 的代码。我将这一行添加到 /etc/ssh/sshd_config

AuthenticationMethods publickey,keyboard-interactive keyboard-interactive

我希望如果提供了密钥,用户将不会被提示输入密码。确切地说,如果提供了公钥,如何绕过 pam_unix.so 要求?

有什么方法可以在一台机器上完成我想要的功能吗?提前致谢。

答案1

可能我已经解决了。

CERN 的 PAM_2FA 项目包含次要 pam 模块:pam_ssh_user_auth.so。此模块可以告诉 PAM 是否有任何先前成功的 sshd 身份验证,如公钥 (PAM_SUCCESS)。因此,我做了以下更改:

在 /etc/ssh/sshd_config 中:

PasswordAuthentication no
ChallengeResponseAuthentication yes 
UsePAM yes 
AuthenticationMethods keyboard-interactive:pam publickey,keyboard-interactive:pam

/etc/pam.d/sshd:

auth    [success=2 ignore=ignore default=die]   pam_ssh_user_auth.so
auth    [success=1 default=ignore]      pam_unix.so nullok
auth    requisite                       pam_deny.so
auth    [success=ok ignore=ignore default=bad]        pam_google_authenticator.so nullok
auth    required        pam_permit.so

它允许在给出公钥时跳过输入密码的提示。

相关内容