禁用特定用户或者组的SSH密码身份验证

时间:2020-03-21 11:43:25  来源:igfitidea点击:

本教程说明了如何在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 yes

接下来,在末尾添加以下行:

[...]
Match User senthil
    PasswordAuthentication no

请注意,匹配是有效的,“直到另一个匹配行或者文件末尾为止”。
如果一个关键字出现在满足的多个Match块中,则仅应用该关键字的第一个实例。

按照上面的示例,我们已禁用了名为“ senthil”的用户的SSH密码身份验证。
用我们自己的用户名替换“ senthil”。
保存并关闭文件。
重新启动ssh服务以使更改生效:

$sudo systemctl restart ssh

现在尝试通过SSH以用户“ senthil”的身份登录:

$ssh Hyman@theitroad

我们将看到以下错误消息:

Hyman@theitroad: 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