我希望能够使用一些 SSH 密钥从本地网络 (192.168.1.*) 登录到(可公开访问的)SSH 服务器,但我不希望该密钥可从本地网络外部使用。
我希望将其他一些密钥用于外部访问(两种情况下都是同一用户)。
在SSH中可以实现这样的事情吗?
Kus*_*nda 22
是的。
在~/.ssh/authorized_keys
服务器上的文件中,每个条目现在可能看起来像
ssh-ed25519 AAAAC3NzaC1lZSOMEKEYFINGERPRINT comment
Run Code Online (Sandbox Code Playgroud)
(或类似)
有一个可选的第一列可能包含选项。这些在sshd
手册中有描述。
选项之一是
from="pattern-list"
Run Code Online (Sandbox Code Playgroud)
指定除了公钥认证之外,远程主机的规范名称或其 IP 地址必须出现在以逗号分隔的模式列表中。有关模式的更多信息,请参阅 ssh_config(5) 中的模式。
除了可以应用于主机名或地址的通配符匹配之外,来自节的可以使用 CIDR 地址/掩码表示法匹配 IP 地址。
此选项的目的是可选地增加安全性:公钥身份验证本身不信任网络或名称服务器或任何东西(但密钥);然而,如果有人以某种方式窃取了密钥,则该密钥允许入侵者从世界任何地方登录。这个附加选项使得使用被盗密钥更加困难(除了密钥之外,名称服务器和/或路由器还必须受到损害)。
这意味着您应该能够~/.ssh/authorized_keys
从
ssh-ed25519 AAAAC3NzaC1lZSOMEKEYFINGERPRINT comment
Run Code Online (Sandbox Code Playgroud)
到
from="pattern" ssh-ed25519 AAAAC3NzaC1lZSOMEKEYFINGERPRINT comment
Run Code Online (Sandbox Code Playgroud)
pattern
与您连接的客户端主机匹配的模式在哪里,例如通过其公共 DNS 名称、IP 地址或某些网络块:
from="192.168.1.0/24" ssh-ed25519 AAAAC3NzaC1lZSOMEKEYFINGERPRINT comment
Run Code Online (Sandbox Code Playgroud)
(这将只允许从192.168.1.*
网络中的主机使用此密钥)
您可以通过在文件from="192.168.1.0/24"
中的公钥前面添加来实现此目的.authorized_keys
。整行应该如下所示:
from="192.168.1.0/24" ssh-rsa AAAA....
Run Code Online (Sandbox Code Playgroud)