如何只允许来自特定 IP 地址的 SSH 密码认证?

我想只允许来自特定子网的SSH密码身份验证。我在/etc/ssh/sshd_config中看到了全局禁止的选项:
# Change to no to disable tunnelled clear text passwords
#PasswordAuthentication yes

有没有办法将这个配置应用到一定范围的IP地址上?
2个回答

/etc/ssh/sshd_config的末尾使用一个Match块:
# 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拒绝了任何连接。你有什么想法为什么会这样? - Michael Waterfall
3@MichaelWaterfall 很难根据这么少的信息判断。确保在验证新配置之前保持一个shell运行。重新启动ssh服务不会影响活动连接。 - Gilles 'SO- stop being evil'
嗯,好的,如果我继续遇到问题,我会进行实验并提供更详细的信息。谢谢! - Michael Waterfall
33可能的问题是您将 Match 块放置在 sshd_config 文件的中间某个位置。Match 行会影响到下一个 Match 行之前的所有行,因此它们应该位于文件的末尾。 - Ken Simon
6尽管答案中有缩进,sshd_config并不是Python的 ;) - Nick T
当将该块添加到文件末尾时它可以工作。但是当它放置在“PasswordAuthentication no”之后时,它会生成错误。journalctl -xe如下:/etc/ssh/sshd_config第70行:指令'PrintMotd'不允许在Match块内。 12月19日09:08:31 Inspiron systemd[1]: ssh.service:主进程已退出,代码=已退出,状态=255/n/a - frepie
1@frepie Match块会一直延伸到下一个Match指令或文件末尾。这就是为什么你必须将它放在最后的原因。 - Gilles 'SO- stop being evil'
Linux 简直太棒了,谢谢你的分享。 - W.M.
或者使用“Match All”指令来终止它。 - anthony

你可以添加:
AllowUsers user1@192.168.*.*, user2@192.168.*.*

这将改变默认行为,真正地拒绝所有其他用户来自所有主机的访问。 匹配块适用于OpenSsh版本5.1及以上。

我允许呼叫一个群组而不是单个用户。 - Lamour
@Lamar 从man sshd_config来看,AllowGroups似乎与AllowUsers的工作方式相同,但AllowUsers似乎优先于AllowGroups - conradkleinespel