我正在使用 Debian bullseye。我尝试设置 SSH 两种类型的登录:
- 密码 + Google Authenticator 的代码(如果用户设置,则为“nullok”选项),
- 来自 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
它允许在给出公钥时跳过输入密码的提示。