尽管 SSHD 配置了 publickey、keyboard-interactive,但仍不断要求输入用户密码

尽管 SSHD 配置了 publickey、keyboard-interactive,但仍不断要求输入用户密码

我正在尝试在 VPS 实例上配置 sshd,并且希望有一个 publickey,keyboard-interactive(公钥和键盘交互)的身份验证。

问题是,在发送并接受公钥后,服务器在登录时不断要求输入服务器用户密码。它应该只要求输入 2FA 代码。我可以使用公钥、服务器用户密码和 2FA 代码登录。

我有另外两个类似的设置,它们运行良好,但我记得在设置它们时遇到了麻烦,就像在奇怪的配置文件中使用黑魔法一样。

我花了无数的时间尝试在其他主机上以这种方式配置 sshd,但现在似乎无法实现。

我还尝试比较工作设置和此设置上的客户端和服务器日志,但日志是相同的!(除了 IP、端口和指纹)

SSH 客户端日志:https://pastebin.com/P1xsKTwm

服务器的 /etc/ssh/sshd_config:https://pastebin.com/qSH7GAmR

服务器的 /etc/pam.d/sshd:https://pastebin.com/YBKY91Rk

(使用 重新启动 sshd sudo systemctl restart sshd.service

编辑:键盘交互不仅适用于 2FA

阅读下面 mforsetti 的回答中的评论,我不明白键盘交互不仅仅用于 2FA。

诀窍是编辑/etc/pam.d/sshd文件以禁用密码验证(在 mforsetti 的帖子和下面的评论中解释)

答案1

问题是,在发送并接受公钥后,服务器在登录时不断要求输入服务器用户密码。

嗯,你明确要求这样做。

AuthenticationMethods publickey,keyboard-interactive

引用sshd_config手动的,

身份验证方法

指定必须成功完成才能授予用户访问权限的身份验证方法。...通过单个字符串any指示接受任何单一身份验证方法的默认行为...

...例如,“publickey,password publickey,keyboard-interactive”将要求用户完成公钥认证,然后进行密码或键盘交互认证。...

因此,添加AuthenticationMethods publickey,keyboard-interactive到您的sshd_config意味着您希望publickey首先完成身份验证,然后keyboard-interactive再完成身份验证。

如果你希望仅使用身份验证publickey,则可能会更改

AuthenticationMethods publickey,keyboard-interactive

AuthenticationMethods publickey

或者,如果您启用任何其他身份验证方法,并期望任何单一成功的身份验证方法视为 OK,则可以使用

AuthenticationMethods any

我想使用公钥和 2FA 进行身份验证

您可能希望common-auth从 PAM 配置中禁用,因为在大多数 Linux/Unix 发行版中,common-auth包括pam-unix.sopam-unix2.so需要帐户密码。

相关内容