Como observado em outras respostas, o known_hosts não tem suporte para intervalos de endereços IP. No entanto, suporta curingas. É claro que os curingas não são exatamente a mesma coisa, então você precisa ser muito cuidadoso sobre como usá-los nos endereços IP, mas no caso particular do Github isso pode ser feito com segurança.
A situação parece ter ficado mais simples desde que a pergunta foi feita. De acordo com a documentação oficial do Github existe apenas um intervalo de endereços IP em uso (pelo menos no que se refere ao IPv4). Este é o intervalo 192.30.252.0/22. Isso faz com que 1020 endereços IP possíveis abranjam convenientemente todo o alcance possível do último octeto em apenas quatro blocos C diferentes.
De man 8 sshd
, é com isso que temos que trabalhar em known_hosts:
Hostnames is a comma-separated list of patterns (
*' and
?' act as wildcards); each pattern in turn is matched against the canonical host name (when authenticating a client) or against the user-supplied name (when authenticating a server). A pattern may also be preceded by!' 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
[' and]' brackets then followed by
:' and a non-standard port number.
Usando essas informações, podemos construir uma entrada usando o caractere curinga * para o último octeto que corresponde a todos os possíveis pontos de extremidade do Github (e SOMENTE esses pontos de extremidade) da seguinte forma:
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==
Se o intervalo de IP que você precisava construir não preenchesse um bloco C completo e, portanto, todos os valores possíveis para um octeto, seria impossível usar curingas para uma correspondência tão precisa.