Wiele usług (takich jak GitHub) używa szerokiej gamy adresów IP i oczywiście tego samego klucza publicznego.
Jak mogę dodać zakres adresów IP (najlepiej w jednym) do pliku znanego_hosta?
W przykładzie GitHub używa następujących zakresów:
- 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
Kluczem jest:
AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa + PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31 / YMF + Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB + weqqUUmpaaasXVal72J + UX2B + 2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi / w4yCE6gbODqnTWlg7 + wC604ydGXA8VJiS5ap43JXiUFFAaQ ==
Odpowiedzi:
Jak zauważono w innych odpowiedziach, znane_hosty nie obsługują zakresów adresów IP. Obsługuje jednak symbole wieloznaczne. Oczywiście symbole wieloznaczne to nie to samo, więc musisz bardzo uważać na to, jak używasz ich w adresach IP, ale w konkretnym przypadku Github można to zrobić bezpiecznie.
Wydaje się, że sytuacja stała się prostsza od momentu zadania pytania. Według oficjalnej dokumentacji Github używany jest tylko jeden zakres adresów IP (przynajmniej jeśli chodzi o IPv4). Jest to zakres 192.30.252.0/22. To daje 1020 możliwych adresów IP, które dogodnie obejmują cały możliwy zakres ostatniego oktetu w zaledwie czterech różnych blokach C.
Od
man 8 sshd
tego musimy współpracować w znanych_hostach:Korzystając z tych informacji, możemy skonstruować wpis z użyciem symbolu wieloznacznego * dla ostatniego oktetu, który pasuje do wszystkich możliwych punktów końcowych Github (i TYLKO tych punktów końcowych), w taki sposób:
Jeśli zakres IP, który musiałeś skonstruować, nie wypełniał pełnego bloku C, a zatem wszystkich możliwych wartości dla oktetu, nie byłoby możliwe użycie symboli wieloznacznych dla tak dokładnego dopasowania.
źródło
Nie sądzę, że można łatwo dodawać zakresy, ale myślę (nie mogę teraz tego przetestować), że ten sam efekt można osiągnąć, dodając do .ssh / ssh_config:
Następnie dodasz klucz do pliku znane_hosty pod nazwą github-server-pool.github.com.
Założenie: host github-server-pool.github.com nie istnieje lub nigdy nie jest podłączony przez SSH.
Chodzi o to, że ssh użyje klucza github-server-pool.github.com jako klucza do wyszukiwania klucza publicznego hosta dla wszystkich hostów domeny github.com.
źródło
known_hosts
Plik nie obsługuje zestawów adresów IP . Będziesz musiał mieć jedną linię na adres.Chociaż część wpisów dotyczących nazwy hosta jest domyślnie zakodowana, służy to tylko prywatności, aby ktoś, kto ją
.known_hosts
przejmie, nie byłby w stanie łatwo dowiedzieć się, z którymi hostami się łączysz. (Nadal mogą weryfikować domysły.) Możesz użyć zwykłej nazwy hosta lub adresu IP.Pamiętaj, że może to dodawać duplikaty.
źródło
Wydaje się, że SSH nie ma pojęcia o zakresach adresów IP dla znanych hostów. Myślę, że założenie jest takie, że każdy host miałby unikalny klucz ze względów bezpieczeństwa.
Dwa sposoby, w jaki mogę wstępnie wypełnić twoje znane hosty:
ssh-keyscan
- Napisz krótki skrypt, aby iterować po wszystkich tych adresach i albo podaj go,ssh-keyscan
albo plikssh-keyscan
do przeczytania.ssh-keyscan
może skanować wiele hostów na każde wywołanie, albo poprzez podanie w jednym wierszu, albo przez podanie listy hostów.Wypełnij
known_hosts
się skryptem lub edytorem. Format jest dość prosty, jeśli używasz wersji nieszyfrowanej. To jest:nazwa hosta, adres IP klucz klucza ssh
hostname
to nazwa hosta, z którym się kontaktujesz, i byłaby taka sama dla wszystkich adresów GitHub.IP address
byłoby to, przez co iterowałby skrypt.key
to klucz, który podałeś powyżej.Żadne nie jest eleganckie, ale myślę, że ludzie SSH założyli, że nikt nie zrobiłby tego, co robi GitHub.
źródło
Cześć Znalazłem skrypt od Gillesa całkiem przydatny, ale praca tylko dla sieci
0.0.0.0/24
była ograniczeniem, rozszerzyłem skrypt do pracy z większymi sieciami,0.0.0.0/16
być może przyda się komuś innemu.źródło