我希望能够使用某些 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....