限制每个用户基于密码的SSH访问,但允许密钥身份验证


Answers:


49

您可以在sshd_config底部添加“匹配”部分以匹配特定的用户或组,例如:

Match user stew
PasswordAuthentication no

要么

Match group dumbusers
PasswordAuthentication no

9
我会避免缩进,因为它暗示只有缩进的行才会受到影响,Match而实际上,所有配置都会受到影响,直到下一Match条指令为止。可能会使不熟悉语法的人感到困惑。
Michael Mior 2013年

2
@MichaelMior有没有办法“ EndMatch”?
尼克T

4
@NickT一直Match工作到下一个MatchHost关键字。您可以使用Match user *
Michael Mior

@MichaelMior这是否意味着如果使用Match user ZaQwEdCxS,就可以使一组配置行暂时或永久不被任何人使用?
Tripp Kinetics

这意味着之后的所有配置行仅适用于名为的用户ZaQwEdCxS。如果您有其他问题,则应该提出一个新问题。
Michael Mior

4

只需使用密码锁定您不想登录的用户的密码:

usermod -L <user>

然后,在他们的.ssh/authorized_keys文件中放置一个有效的公共密钥,他们将只能使用相应的私有密钥登录,而不能使用密码登录。

注意:除非用户在其visudo条目中具有NOPASSWD :,否则这将破坏sudo。


8
那也将破坏须藤。在这种情况下,也许不是问题,但值得一提。
EEAA 2012年

是的,那是真的。我应该提到它。
奥利弗·

1
某些OpenSSH设置(例如,我认为默认配置中的Ubuntu 14.04)不允许锁定用户进入,甚至不通过authorized_keys
Nils Toedtmann 2014年

您可以引用@NilsToedtmann进行验证的来源吗?如果是的话,这在回答中也非常重要。
传记作者2015年

-3

你应该看看

/etc/ssh/sshd_config

我想你要找的是

PasswordAuthentication yes

将其更改为否,不要忘记重启sshd


2
我知道这一点-尽管这是GLOBAL设置-我想要更细化的选项-这就是为什么我说“按用户”-我只希望某些用户使用(用于集群中服务器之间的内部集群通信) -并非适用于所有用户
回转

哦对了,对不起我没有正确阅读它,那么@stew推荐的方法是要走的路
alexus 2012年
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.