如其他答案所述,known_hosts不支持IP地址范围。但是,它确实支持通配符。当然,通配符并不是一回事,因此您需要非常小心如何在IP地址中使用通配符,但是在Github的特殊情况下,可以安全地完成通配符。
自从提出问题以来,情况似乎变得更加简单。根据Github的官方文档,仅使用一个IP地址范围(至少就IPv4而言)。这是192.30.252.0/22的范围。这使得1020个可能的IP地址方便地跨越了四个不同C块中最后一个八位位组的整个可能范围。
从man 8 sshd
,这就是我们在known_hosts中需要处理的内容:
主机名是逗号分隔的模式列表(*' and
?'用作通配符);每个模式又与规范的主机名(在验证客户端时)或用户提供的名称(在验证服务器时)相匹配。模式也可以以!' to indicate negation: if the host name matches a negated pattern, it is not accepted (by that line) even if it matched another pattern on the line. A hostname or address may optionally be enclosed within
['和]' brackets then followed by
:'和非标准端口号开头。
使用此信息,我们可以使用*通配符构造一个与所有可能的Github端点(并且仅那些端点)匹配的最后一个八位位组的条目,如下所示:
github.com,192.30.252.*,192.30.253.*,192.30.254.*,192.30.255.* ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==
如果您需要构造的IP范围没有填充完整的C块,因此没有填充一个八位位组的所有可能值,那么将不可能使用通配符来进行如此精确的匹配。