强制特定用户的SSH公钥authentication

是否可以强制特定用户使用公钥login,同时允许其他用户使用密码login? 由于公钥authentication(使用密码)比纯密码authentication更强,我们希望sudoer用公钥login。 但是,强制普通用户这样做是不太方便的。 在sshd_config ,我看不到任何策略相关的configuration。

你有几个select。 在这个答案中,我将假设你已经定义了一个sudoers组。

看一下sshd_config手册页,然后查找Match指令。 这使您可以指定仅适用于ssh连接子集的configuration块。 你可以做这样的事情:

 Match Group sudoers PasswordAuthentication no ChallengeResponseAuthentication no 

理论上,你可以用一个PAMconfiguration来完成类似的事情,这只会使sudoers组中的用户无法进行authentication尝试。 这可能会涉及到pam_succeed_if模块…你可以添加这样的东西到你的authconfiguration为sshd:

 auth requisite pam_succeed_if.so user notingroup sudoers quiet 

这意味着只有不在sudoers组的人才能通过PAM进行身份validation。 请注意,这是未经testing的。 您也可以使用pam_listfile模块来做类似的事情。

另一个可能的答案,作为@larsks,答案不适用于我的版本的ssh_d因为我的版本似乎是使用在这里find的文件说明:

匹配关键字后面的行中只能使用一部分关键字。 可用的关键字是。 。 。

该关键字列表不包括: ChallengeResponseAuthentication

我发现一个非常有趣的方法是使用AuthenticationMethods ,在你的情况下,它会像这样工作:

 Match Group sudoers AuthenticationMethods 'publickey' 

AuthenticationMethods获取逗号分隔值列表,表示用户在访问服务器之前必须经过的一系列方法。

AuthenticationMethods 'publickey,password'将强制用户通过公钥和密码。

阅读更多的man sshd_config