如何为某些用户禁用使用密码的SSH登录?


165

在Linux(Debian Squeeze)上,我想禁用对某些用户(选定的组或除root以外的所有用户)使用密码的SSH登录。但是我不想禁用使用证书的登录。

编辑:非常感谢详细的答案!由于某些原因,这在我的服务器上不起作用:

Match User !root
PasswordAuthentication no

...但是很容易被替换

PasswordAuthentication no
Match User root
PasswordAuthentication yes

也许是因为您的缩进?
2012年

7
值得一提的是,匹配项下的这些行应位于文件末尾
zidarsk8 2013年

1
!root对我也不起作用。第二种方法成功了。
natenho 2015年

我看过一些工作在哪里Match User "!root,*"
Roman Hocke

Answers:


179

尝试Matchsshd_config

Match User user1,user2,user3,user4
    PasswordAuthentication no

或按组:

Match Group users
    PasswordAuthentication no

或者,如评论中所述,通过否定:

Match User !root
    PasswordAuthentication no

请注意,匹配是有效的,“直到另一个匹配行或文件末尾。” (缩进并不重要)


4
Match user !root对于这种情况更喜欢
84104

1
太棒了,我对Match语法一无所知。但是,我提出的一个建议是,如果这是一台面向公众的服务器,那么我将根本不允许通过SSH进行root登录。也许不是一个大问题,如果它的内部,但..
Safado

4
@SpacemanSpiff这就是a)强密码和b)denyhosts / fail2ban的用途。
ceejayoz

2
@ deed02392如果愿意,您可以将密钥视为一个非常非常强大的密码。
ceejayoz

4
我要说的是,它要强得多,不在同一个球场内。root用户也应禁用密码身份验证,并且仅允许登录使用密钥。
deed02392

21

Matchsshd_config运作良好。Match all如果您使用的是openssh 6.5p1或更高版本,则应使用结尾匹配块。例:

PasswordAuthentication no
Match User root
PasswordAuthentication yes
Match all

它对我不起作用...
Dimitrios

3

有几种方法可以执行此操作-首先,可以使用不同的配置在不同的端口上方便地运行另一个sshd守护程序-这有点麻烦,但是通过chroot的工作,它应该可以正常工作。

另外,您可以允许密码验证,但可以锁定一个用户以外的所有用户的密码。密码已锁定的用户仍然可以使用公共密钥进行身份验证。


-1

您可以简单地转到/ etc / ssh / sshd_config文件并添加一行以允许-> AllowUsers user1拒绝---> DenyUsers user2

我们可以使用/ etc文件夹中的hosts.allow或hosts.deny文件来允许/拒绝特定主机组的登录


-1

由于安全原因,您可能需要阻止某些用户对Linux的SSH访问。

编辑sshd_config文件,该位置有时会有所不同,具体取决于Linux发行版,但通常在/ etc / ssh /中。

以root用户身份登录时打开文件:

# vi /etc/ssh/sshd_config

在配置文件的末尾插入一行:

DenyUsers username1 username2 username3 username4

保存并重新启动SSH服务。基本上,username1,username2,username3和username4不允许SSH登录。

运行以下命令以重新启动该命令:-

# systemctl restart sshd

要求已完成。请从该用户那里获取ssh,您将得到错误“访问被拒绝”


1
问题是关于禁用密码登录(但使用密钥身份验证保留登录)。
Gerald Schneider
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.