服务器中禁用特定用户或组的SSH密码身份验证
本文讲解如何在Linux和Unix操作系统的服务器中为特定用户或组禁用SSH密码身份验证。请注意,这不会完全禁止对用户或组的SSH访问。相反,它将仅禁用SSH密码身份验证。用户仍然可以使用其他身份验证方法(例如基于密钥的身份验证)通过SSH访问系统。
一、禁用特定用户或组的SSH密码身份验证
我们可以使用Linux中的“ / etc / ssh / sshd_config”文件为用户和/或整个组允许或拒绝SSH访问。sshd_config文件具有一个名为“ Match”的参数,该参数将帮助您禁用用户或组的SSH密码身份验证。
首先让我们看看如何为特定用户禁用密码身份验证。
使用您喜欢的编辑器作为root或sudo用户来编辑“ / etc / ssh / sshd_config”文件:
$ sudo nano / etc / ssh / sshd_config
首先,通过注释掉以下行来删除默认的身份验证方法:
#PasswordAuthentication是
接下来,在末尾添加以下行:
[...]
Match User senthil
PasswordAuthentication no

请注意,"Match "是有效的,"直到另一个 "Match "行或文件结束"。如果一个关键字出现在多个满足的Match块中,则只应用该关键字的第一个实例。
根据以上示例,我们已禁用了名为“ senthil”的用户的SSH密码身份验证。用您自己的用户名替换“ senthil”。保存并关闭文件。重新启动ssh服务以使更改生效:
$ sudo systemctl restart ssh
现在尝试通过SSH以用户“ senthil”的身份登录:
$ ssh senthil@192.168.225.53
您将看到以下错误消息:
senthil@192.168.225.53: Permission denied (publickey).

二、禁用组的SSH密码身份验证
要禁用特定组的SSH密码身份验证,只需将用户名替换为sshd_config文件中的组名即可。
Match Group mygroup
PasswordAuthentication no
用您自己的组名替换上述配置中的“ mygroup”。
不要忘记重启ssh服务以应用更改。
三、禁用多个用户的SSH密码身份验证
您可以通过使用逗号分隔的用户名来拒绝多个用户的SSH密码身份验证,如下所示:
Match User senthil,kumar
PasswordAuthentication no
上面的示例配置将阻止用户“ senthil”和“ kumar”的SSH密码身份验证。
四、对除root用户以外的所有用户禁用SSH密码身份验证
在某些Linux系统中,您可能只想对“ root”用户允许SSH密码认证,而对所有其他用户禁用SSH密码认证。如果是这样,请在sshd_config文件的末尾添加以下行:
Match User !root
PasswordAuthentication no
五、通过主机或IP地址限制SSH密码身份验证
不只是用户或组,我们还可以拒绝通过主机或IP地址进行的SSH密码身份验证。
例如,以下示例将阻止从包含IP地址的主机进行SSH访问:
Match Address 192.168.225.37
PasswordAuthentication no
要限制特定IP地址范围的SSH密码身份验证,请添加以下内容:
Match Address 192.168.225.*
PasswordAuthentication no
并且此示例将拒绝使用包含主机名的主机的密码进行SSH访问:
Match Address hostname
PasswordAuthentication no
有关更多详细信息,请参见手册页。
$ man sshd_config