禁用特定用户或者组的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 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