如何限制指定的SSH用户仅从一个IP或主机名连接?

我有一个监控服务器,需要它监控的每个盒子的非sudo用户帐户的SSH连接详细信息。 有没有办法可以配置特定的用户帐户,使其只能从特定的IP(或更好的主机名)登录? 我不想限制服务器上其他用户能够从其他地址连接的能力(否则我只使用防火墙),或仅使用密码身份validation进行监控服务 。

请参阅man sshd_config 。 可以添加AllowUsers块,您可以在其中指定用户和主机,如下所示:

 AllowUsers user@host # or IP 

当然,如果你有一些用户,你还需要指定你想允许登录的其他用户。

另一种解决方案(取决于错误修复!)

当我再次考虑它时,有可能像这样修改你的sshd_config

 Match Host !hostname DenyUsers user Match Host hostname AllowUsers user 

这将很容易阻止除用户之外的所有user来自hostname以及阻止user其他任何user

但它不起作用,因为上游报告的漏洞很少[1] [2]。 但我们得到了承诺,它将在下一版本中得到修复。

您可以在/etc/ssh/sshd_config文件中为AllowUsers行使用通配符。 所以添加这条线是可行的:

 AllowUsers *@192.168.1.100 

要么:

 AllowUsers *@hostname 

允许每个人从该IP地址或主机名访问。

记得:

 service ssh restart 

完成更改后,只要您使用的是15.04之前的版本。 15.04现在使用systemd,因此具有不同的服务控制机制。

根据手册页 ,这应该工作:

 DenyUsers user@"!host,*" 

我在Debian上测试了它,它似乎工作正常。

由于这是google中的热门搜索结果,我认为人们也应该知道在/etc/hosts.allow文件中设置权限(Cameron Oltmann关于此事的博客文章 ):

要根据原始IP地址限制对Linux机器的ssh访问,请编辑/etc/hosts.allow:

 sshd : localhost : allow sshd : 192.168.0. : allow sshd : 99.151.250.7 : allow sshd : mydomain.net : allow sshd : ALL : deny 

上面的条目允许从localhost,192.168.0.x子网,单个IP地址99.151.250.7和mydomain.net进行ssh访问(假设mydomain.net有一个ptr记录,以便于反向查找)。 所有其他IP地址将被拒绝访问sshd。

注意:您可以根据IP地址,子网或主机名允许或拒绝。 按大多数到最不具体的顺序列出规则。 只有找到匹配的行才会读取该文件,因此如果以ssdh:ALL:deny开头,则不允许使用ssh连接。

根据此lifewire.com链接 ,您应该能够在此文件中使用user@address

更复杂的表单daemon @ host和user @ host分别在服务器端点模式和客户端用户名查找部分中进行了说明。