我正在尝试在 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.so
或pam-unix2.so
需要帐户密码。