Regularnie ssh do komputera, który jest komputerem z podwójnym bootowaniem OS X / Linux. Dwa wystąpienia systemu operacyjnego nie współużytkują tego samego klucza hosta, dlatego można je postrzegać jako dwa hosty współdzielące ten sam adres IP i DNS. Powiedzmy, że adres IP to 192.168.0.9
, a nazwy to hostname
ihostname.domainname
O ile rozumiem, rozwiązaniem umożliwiającym połączenie z dwoma hostami jest dodanie ich obu do ~/.ssh/know_hosts
pliku. Jednakże, jest łatwiej powiedzieć niż zrobić, ponieważ plik jest mieszany, a prawdopodobnie kilka wpisów na hosta ( 192.168.0.9
, hostname
, hostname.domainname
). W rezultacie otrzymałem następujące ostrzeżenie
Warning: the ECDSA host key for 'hostname' differs from the key for the IP address '192.168.0.9'
Czy istnieje prosty sposób edycji known_hosts
pliku przy jednoczesnym zachowaniu skrótów? Na przykład, jak mogę znaleźć linie odpowiadające danemu hostowi? Jak wygenerować skróty dla niektórych znanych hostów?
Idealne rozwiązanie pozwoliłoby mi bezproblemowo połączyć się z tym komputerem za pomocą ssh, bez względu na to, czy go nazywam 192.168.0.9
, hostname
czy hostname.domainname
też używa on klucza hosta Linux lub OSX. Jednak nadal chcę otrzymywać ostrzeżenie, jeśli istnieje prawdziwy atak typu man-in-the-middle, tj. Jeśli użyty zostanie inny klucz niż te dwa.
Odpowiedzi:
Najprostszym rozwiązaniem jest użycie tych samych kluczy hosta w systemie Linux i OS X. Oznacza to, że wybierz jeden zestaw
/etc/ssh/ssh_host_*_key*
plików i skopiuj je do drugiego systemu operacyjnego. Następnie ten sam klucz hosta zostanie przedstawiony klientowi SSH bez względu na system operacyjny, z którego się uruchomiłeś, a klient SSH nie będzie mądrzejszy.źródło
/private/etc/ssh_host*
nie jest/etc/ssh/ssh_host*
.sshd
ładuje klucze hosta raz podczas uruchamiania, więc najprawdopodobniej konieczne będzie ponowne uruchomieniesshd
. Dodam to do odpowiedzi. Jeśli chodzi o lepsze rozwiązania, zależy to od twojej sytuacji. Twierdziłbym, że głównymi zaletami tej metody jest to, że wymaga ona tylko jednorazowej konfiguracji i jest bardziej prawdopodobne, że będzie współpracować z wieloma implementacjami klienta SSH.sshd
ładuje klucze hosta przy każdym nowym połączeniu. Może tak było już dawno i po prostu założyłem, że klucze hosta były traktowane jak innasshd
konfiguracja. Tak czy inaczej, może to być twój problem.Jak @Izzy zasugerował w powyższym komentarzu, ssh mówi ci linię obrażającą, a poprzez usunięcie tej linii (zapisanie jej w innym miejscu), zaakceptowanie nowego klucza, a następnie skopiowanie usuniętej linii z powrotem, otrzymujesz dwa klucze dla tego samego host, a ssh zaakceptuje oba.
(Możesz także użyć
ssh-keygen -H -F <hostname>
do znalezienia wierszy w pliku znane_hosty, które pasują do tej nazwy hosta. Uruchomienie tego po skopiowaniu usuniętej linii powinno zawierać dwie pozycje).Jeśli ktoś wie, jak zmusić PuTTY do zrobienia tego samego, byłbym bardzo zainteresowany.
źródło
Znalazłem to, co może ci pomóc w osiągnięciu tego, co chcesz osiągnąć.
Źródło: /programming/733753/how-to-handle-ssh-host-key-verification-with-2-different-hosts-on-the-same-but
źródło
known_hosts
iCheckHostIP
.Najłatwiejszym sposobem rozwiązania problemu jest nadanie każdemu hostowi własnego / odrębnego adresu IP. Z 253 adresami dostępnymi w twojej (prywatnej) sieci i IPv4, to nie powinno być nic wielkiego. Daj im stałe adresy IP (ponieważ serwer DHCP zidentyfikuje maszynę na podstawie adresu MAC karty sieciowej i oba otrzymają ten sam adres). Nie widzę żadnego innego rozwiązania, jeśli chcecie zachować środki bezpieczeństwa (których nie oddałbym również za ten mały „komfort”).
źródło
192.168.0.xx
jest i nie jest prywatny. Jest to „prawdziwy” adres IPv4 podany przez mój uniwersytet, którego nie mogę zmienić.Nie napotykam tego problemu podczas łączenia się z różnymi skrzynkami VPS współdzielącymi ten sam adres IP, ponieważ każdy z nich ma inny port SSH (20022,30022 itp.), Więc są one zarejestrowane jako znane hosty z różnymi kluczami.
Czy to może być obejście problemu?
źródło
Kolejny artykuł , w którym opisano kilka sposobów rozwiązania problemu:
źródło
hostname
zostanie ponownie uruchomiony w Linut lub OSXPonieważ chcesz zachować ścisłe sprawdzanie klucza hosta, kazałbym im używać różnych
known_hosts
plików. Aby to zrobić, skonfiguruj~/.ssh/config
plik (lub/etc/ssh/ssh_config
plik, jeśli potrzebujesz go do pracy na wielu lokalnych kontach użytkowników) w następujący sposób:,
$REALHOSTNAME
oczywiście zastępując rzeczywistą nazwę hosta lub adres IP. (Nie ma znaczenia, który wybierzesz, tak długo, jak wybierzesz coś po „Nazwie hosta”, które przejdzie do adresu IP, ale użyłbym nazwy hosta zamiast adresu IP, tylko na ogólnych zasadach).Wtedy
ssh myserver.linux
issh myserver.osx
mogą mieć różne klucze hosta, ale nadal otrzymujesz sprawdzanie. Jeśli to Linux działa i wpiszesz OS X (lub odwrotnie), dostaniesz ostrzeżenie (które moim zdaniem jest pożądanym skutkiem).Gdybym miał ten problem, upewniłbym się, że w głównym
known_hosts
pliku jest coś zupełnie nie tak , który nie pasuje do żadnego z nich, więc jeśli napiszesz$REALHOSTNAME
zamiast tegomyserver.osx
, otrzymasz ostrzeżenie. :-) Zrobiłbym to, umieszczając coś takiegow moim
/etc/hosts
, a następnie zrobieniessh $REALHOSTNAME
i zaakceptowanie nowego klucza, a następnie wyjęcie tego wpisu.źródło