对特定用户强制进行SSH公钥身份验证


10

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

Answers:


11

您有几种选择。在这个答案中,我将假设您已sudoers定义一个组。

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

Match Group sudoers
PasswordAuthentication no
ChallengeResponseAuthentication no

从理论上讲,您可以使用PAM配置完成一些类似的操作,而这些操作只会使sudoers组中的人员无法通过身份验证尝试。这可能涉及pam_succeed_if模块...您可以auth在sshd 的配置中添加如下内容:

auth        requisite     pam_succeed_if.so user notingroup sudoers quiet

这意味着只有不在sudoers组中的人才能通过PAM进行身份验证。请注意,这未经测试。您也可以使用 pam_listfile模块执行类似的操作。


1
谢谢!我还必须注意,OpenSSH 5.0中引入了Match指令。对于像CentOS这样的保守发行版,它可能无法在本地使用。
Crend King

这破坏了OpenSSH 7.7p1-我必须删除ChallengeResponseAuthentication指令才能使其重新启动。
rbsec

2

另一个可能的答案(如@larsks)对我的版本无效,ssh_d因为我的版本似乎正在使用此处找到的文档其中指出:

Match关键字之后的行上只能使用关键字的子集。可用的关键字是。。。

该关键字列表不包括:ChallengeResponseAuthentication

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

Match Group sudoers
AuthenticationMethods 'publickey'

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

AuthenticationMethods 'publickey,password' 会迫使用户先通过公共密钥然后通过密码。

阅读更多man sshd_config

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.