如何仅允许从某些IP地址进行SSH密码身份验证?


103

我只想允许来自某个子网的SSH密码身份验证。我在以下位置看到了全局禁止它的选项/etc/ssh/sshd_config

# Change to no to disable tunnelled clear text passwords
#PasswordAuthentication yes

有没有办法将此配置应用于选定的IP地址范围?

Answers:


156

使用Match在最后/etc/ssh/sshd_config

# Global settings
…
PasswordAuthentication no
…

# Settings that override the global settings for matching IP addresses only
Match address 192.0.2.0/24
    PasswordAuthentication yes

然后告诉sshd服务重新加载其配置:

service ssh reload

1
我尝试了此操作(改为使用192.168.0.0/16),当我重新启动ssh服务时,我被锁定了。SSH拒绝任何连接。知道为什么会这样吗?
迈克尔瀑布

2
@MichaelWaterfall这么少的信息是无法分辨的。在验证新配置之前,请确保外壳运行。重新启动ssh服务不会影响活动连接。
吉尔斯2013年

28
可能的问题是,将Match块放置在sshd_config的中间位置。匹配行影响下一行,直到下一个匹配行,因此它们应位于文件末尾。
肯·西蒙

6
尽管答案sshd_config是缩进的,但不是Python;)
Nick T

1
@frepie该Match块将一直扩展到下一个Match指令或文件的末尾。这就是为什么您必须将其放在最后。
吉尔斯

8

你可以加:

AllowUsers user1@192.168.*.*, user2@192.168.*.*

这更改了默认行为,实际上拒绝了来自所有主机的所有其他用户。匹配块在OpenSsh 5.1版及更高版本中可用。


呼叫我允许一个组而不是一个用户
Lamar

@Lamar从来看man sshd_config,其AllowGroups工作方式与相同AllowUsers,但AllowUsers似乎优先于AllowGroups
conradkdotcom
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.