因此,经过广泛的测试和讨论后,我再也无法独自解决这个问题。
目标:使用公钥或密码通过 ssh 进行身份验证,并使用 PAM 进行 MFA。
使用的系统是Ubuntu Server 20.04
将其拆分成可管理的部分也显示出将不同部分组合在一起会遇到一些困难。
使用公钥进行身份验证并使用 PAM 进行 MFA 不是问题。使用密码进行身份验证并使用 PAM 进行 MFA 不是问题。使用公钥或密码有点不同。与 MFA 结合似乎是不可能的。
问题似乎在于 SSHD 如何使用密码验证用户。如果没有 PAM,SSHD 就无法做到这一点,因为如果没有 PAM,用户影子文件就无法读取。启用 PAM 并为身份验证堆栈激活 pam_env.so 和 pam_sssd.so 可以解决这个问题。
因此,使用 PAM,我可以使用公钥或密码进行身份验证。我不明白的是,为什么 SSHD 需要用户影子文件来进行密码身份验证,而公钥则不需要?我仍然使用公钥获取我的组和所有内容,而无需 PAM,并使用 SSSD 通过 authorized_keys 命令提供公钥。
要使用密码进行身份验证,我需要身份验证堆栈中相应的 pam 模块。
这不会有太大问题,但目标是启用 MFA,除非需要,否则不提示用户输入密码。MFA 需要使用 PAM 来实现。将 PAM 与公钥一起使用不是问题,在 sshd_config 中设置方法“publickey,keyboard-interactive”会将其传递给 PAM,并在 pam_env.so 之后为 MFA 设置 PAM 模块可以实现这一点。
但是启用方法“密码,键盘交互”需要 pam_sss.so 模块,所以即使我使用 publickey 方法,也会提示我输入密码,然后提示我输入 MFA。
我该如何解决这个问题,以便我可以使用 sssd 的密码或 sssd 的公钥通过 ssh 进行身份验证?下一步,PAM 是否是密码的要求(最好不是),无论哪种方式,如何实现 MFA?
由于这个问题仍然在我脑海里盘旋,我确信我可以更好地解释事情,但我已经尽力解释我的困难了。
我读过的内容是 sssd、pam_ssh、pam_sssd、pam_ssh_agent_auth、sshd。还阅读了 DUO、Google MFA、RedHat 的文档。
有什么想法或主意吗?
任何反馈都将不胜感激。
谢谢!