Muitos serviços (como o GitHub) usam uma ampla variedade de IPs e, obviamente, a mesma chave pública.
Como posso adicionar um intervalo de IPs (de preferência em um único) ao arquivo known_hosts?
Para o exemplo do GitHub, ele usa os seguintes intervalos:
- 207.97.227.224/27
- 173.203.140.192/27
- 204.232.175.64/27
- 72.4.117.96/27
- 192.30.252.0/22
E a chave é:
AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa + PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31 / YMF + Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB + weqqUUmpaaasXVal72J + UX2B + 2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi / w4yCE6gbODqnTWlg7 + wC604ydGXA8VJiS5ap43JXiUFFAaQ ==
Respostas:
Conforme observado em outras respostas, known_hosts não tem suporte para intervalos de endereços IP. No entanto, ele suporta caracteres curinga. É claro que os curingas não são exatamente a mesma coisa; portanto, você precisa ter muito cuidado com a maneira como os usa 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 diz respeito ao IPv4). Este é o intervalo 192.30.252.0/22. Isso possibilita 1020 endereços IP possíveis que abrangem convenientemente todo o intervalo possível para o último octeto em apenas quatro blocos C diferentes.
A partir
man 8 sshd
disso, é com isso que devemos trabalhar em known_hosts:Usando essas informações, podemos construir uma entrada usando o curinga * para o último octeto que corresponda a todos os pontos de extremidade possíveis do Github (e SOMENTE esses pontos de extremidade) da seguinte maneira:
Se o intervalo de IP que você precisava construir não preencheu um bloco C completo e, portanto, todos os valores possíveis para um octeto, seria impossível usar caracteres curinga para uma correspondência tão precisa.
fonte
Eu não acho que você possa adicionar facilmente os intervalos, mas acho que (não é possível testar isso agora) que o mesmo efeito pode ser alcançado adicionando o seguinte a .ssh / ssh_config:
Em seguida, você adicionaria a chave ao arquivo known_hosts sob o nome github-server-pool.github.com.
Suposição: o host github-server-pool.github.com não existe ou nunca está conectado através do SSH.
A idéia por trás disso é que o ssh usará a chave github-server-pool.github.com como a chave para procurar a chave do host público de todos os hosts do domínio github.com.
fonte
Não há suporte para conjuntos de endereços IP no
known_hosts
arquivo. Você precisará ter uma linha por endereço.Embora a parte do nome do host das entradas tenha um hash por padrão, isso é apenas para privacidade, para que alguém que se apossar de você
.known_hosts
não possa descobrir facilmente com quais hosts você está se conectando. (Eles ainda podem verificar suposições.) Você pode usar um nome de host ou endereço IP simples.Observe que isso pode adicionar duplicatas.
fonte
O SSH parece não ter conceito de intervalos de IP para hosts_conhecidos. Eu acho que a suposição é que cada host teria uma chave exclusiva por razões de segurança.
Duas maneiras que eu posso ver para preencher previamente seus_conhecidos_hosts:
ssh-keyscan
- Escreva um breve script para percorrer todos esses endereços e alimente-ossh-keyscan
ou um arquivo parassh-keyscan
leitura.ssh-keyscan
pode varrer vários hosts por invocação, especificando em uma linha ou especificando uma lista dos hosts.Preencha-
known_hosts
se com um script ou editor. O formato é bastante simples se você usar a versão sem hash. Isto é:nome do host, endereço IP chave ssh-keytype
hostname
é o nome do host que você contata e seria o mesmo para todos os endereços do GitHub.IP address
seria o que um script iria percorrer.key
é a chave que você forneceu acima.Nem é elegante, mas acho que o pessoal do SSH assumiu que ninguém faria o que o GitHub está fazendo.
fonte
Olá, achei o script de Gilles bastante útil, mas apenas trabalhar para redes até
0.0.0.0/24
era uma limitação, estendi o script para trabalhar com redes maiores, até que0.0.0.0/16
talvez seja útil para outra pessoa.fonte