如何将 SSH 密钥限制为某些 IP 地址?

如何将 SSH 密钥限制为某些 IP 地址?

我希望能够使用某些 SSH 密钥从本地网络 (192.168.1.*) 登录到(可公开访问的)SSH 服务器,但我不希望该密钥可从本地网络外部使用。
我希望使用其他密钥来进行外部访问(两种情况下都是同一用户)。

在 SSH 中可以实现这样的事情吗?

答案1

是的。

~/.ssh/authorized_keys在服务器上的文件中,每个条目现在可能看起来像

ssh-ed25519 AAAAC3NzaC1lZSOMEKEYFINGERPRINT comment

(或类似)

有一个可选的第一列,其中可能包含选项。这些在手册中都有描述sshd

其中一个选项是

from="pattern-list"

指定除了公钥身份验证之外,远程主机的规范名称或其 IP 地址必须出现在以逗号分隔的模式列表中。有关模式的更多信息,请参阅 ssh_config(5) 中的模式。

除了可以应用于主机名或地址的通配符匹配之外,from 节还可以使用 CIDR 地址/掩码长度表示法来匹配 IP 地址。

此选项的目的是选择性地提高安全性:公钥身份验证本身不信任网络或名称服务器或任何东西(除了密钥);但是,如果有人以某种方式窃取了密钥,则该密钥将允许入侵者从世界任何地方登录。这个附加选项使得使用被盗密钥变得更加困难(除了密钥之外,名称服务器和/或路由器也必须受到损害)。

这意味着您应该能够~/.ssh/authorized_keys修改

ssh-ed25519 AAAAC3NzaC1lZSOMEKEYFINGERPRINT comment

from="pattern" ssh-ed25519 AAAAC3NzaC1lZSOMEKEYFINGERPRINT comment

哪里pattern是与您要连接的客户端主机相匹配的模式,例如通过其公共 DNS 名称、IP 地址或某些网络块:

from="192.168.1.0/24" ssh-ed25519 AAAAC3NzaC1lZSOMEKEYFINGERPRINT comment

(这仅允许从网络中的主机使用此密钥192.168.1.*

答案2

您可以通过在文件from="192.168.1.0/24"中的公钥前面添加来实现此目的.authorized_keys。整行应该如下所示:

from="192.168.1.0/24" ssh-rsa AAAA....

相关内容