强制特定用户进行 SSH 公钥认证

强制特定用户进行 SSH 公钥认证

是否可以强制特定用户使用公钥登录,同时允许其他用户使用密码登录?由于公钥身份验证(使用密码)比仅使用密码的身份验证更强大,我们希望要求 sudoers 使用公钥登录。但是,强制普通用户这样做不太方便。在 中sshd_config,我没有看到任何与策略相关的配置。

答案1

您有几个选择。在此回答中,我假设您已sudoers定义一个组。

查看sshd_config手册页,并查找Match指令。这允许您指定仅适用于 ssh 连接子集的配置块。您可以执行以下操作:

Match Group sudoers
PasswordAuthentication no
ChallengeResponseAuthentication no

理论上,你可以用 PAM 配置来实现类似的事情,该配置只会让sudoers组中的人员的身份验证尝试失败。这可能涉及成功时模块……您可以将类似这样的内容添加到authsshd 的配置中:

auth        requisite     pam_succeed_if.so user notingroup sudoers quiet

这意味着只有不属于该sudoers组的人才能通过 PAM 进行身份验证。请注意,这未经测试。您还可以使用 pam_列表文件模块来做类似的事情。

答案2

另一个可能的答案,正如@larsks所说,答案对我的版本不起作用,ssh_d因为我的版本似乎正在使用找到的文档这里其中指出:

在 Match 关键字之后的行中只能使用关键字的子集。可用的关键字有...

该关键字列表不包括:ChallengeResponseAuthentication

我发现一个非常有趣的方法是使用AuthenticationMethods你的情况,如下所示:

Match Group sudoers
AuthenticationMethods "publickey"

AuthenticationMethods采用逗号分隔的值列表,这些值代表用户在访问服务器之前必须通过的一系列方法。

AuthenticationMethods "publickey,password"将强制用户使用公钥然后输入密码。

阅读更多内容man sshd_config

相关内容