Korzystam z połączeń SSH opartych na PKI od ponad 10 lat. Nagle po aktualizacji serwera niektóre połączenia przestały działać. Używam tych samych kluczy PKI, których używałem od lat (każdy serwer ma swoje własne klucze, mam mały zestaw kluczy osobistych).
Praca - wygląda następująco:
C:\Users\michael>ssh2 -p 2222 [email protected] date
Authentication successful.
Fri Nov 25 10:30:42 2016
Nie działa wygląda następująco:
C:\Users\michael>ssh2 [email protected] date
warning: Authentication failed.
Disconnected; key exchange or algorithm negotiation failed (Algorithm negotiation failed.).
Co się zmieniło?
Odpowiedzi:
Po aktualizacji - mogą pojawić się efekty uboczne. Z OpenSSH - wartości domyślne często się zmieniają. OpenBSD (który utrzymuje / rozwija OpenSSH) ma politykę OpenBSD, aby nie martwić się kompatybilnością wsteczną. Może to „zepsuć” rzeczy, które, jak czytamy, działają dobrze.
Jest ogromna wskazówka - że nie zauważyłem, kiedy to mi się po raz pierwszy przydarzyło (używając interfejsu GUI, po prostu kliknąłem go i „byłem zły” na „głupią aktualizację - nowa wersja jest zepsuta”. nie został uszkodzony - ale OpenBSD / OpenSSH zaczyna zmieniać domyślne ustawienia wymiany kluczy, zaczynając od OpenSSH-6.7p1, patrz: http://www.openssh.com/txt/release-6.7 , zauważalnie:
Mój problem polega na tym, że mam starego klienta, który nie ma żadnych nowych ustawień domyślnych, więc nie może się połączyć.
Dwie ścieżki rozwiązania: napraw / załataj serwer lub - napraw / załataj klienta.
Rozwiązanie serwerowe: przywróć „stare” ustawienia, aby „starzy” klienci mogli się dalej łączyć, to znaczy - przyjazny dla istniejących klientów - edytować plik sshd_config i dodać (wystarczającą) liczbę starych szyfrów.
Kluczowe linie do zmiany / dodania w sshd_config to:
Poprostu dodaj:
Rozwiązanie nr 2 - napraw / wymień klienta
Prostym sposobem na sprawdzenie, jakie szyfry obsługuje Twój obecny klient (przy założeniu CLI)
ssh -h
i sprawdzenie, czy to zapewnia:Kolejnym przydatnym poleceniem jest:
ssh -V
Mój - był - bardzo stary klient - na mój pulpit. Patrząc powyżej, widać, że nie obsługuje żadnego z - 15 lat później - preferowanych algorytmów, nawet jednego -cbr (rotacja), tylko -cbc (block-copy).
Jeśli twój klient nie ma opcji dostarczenia obsługiwanych kluczy itp. (OpenSSH powinien mieć taką opcję
-Q
), po prostu rozpocznij połączenie ze sobą, np.ssh -v localhost
I istnieją takie linie, aby powiedzieć, że wat jest znany:A co zostało znalezione (i wykorzystane):
Dodatkowo: informacje debugowania z nieudanego połączenia - więcej szczegółów
Lub, co próbowano, ale przegapiono.
Edycja: dodano 02-sty-2017
Nowa sekcja - co z kluczami, które przestają działać?
Na moim serwerze mam zainstalowanego „starego” klienta i „najnowszego” klienta - i uzyskuję inne zachowanie podczas łączenia się z serwerem. Tutaj problemem nie są niezgodności szyfrów - lecz zastosowanie archaicznej pary PKI - opartej na DSA.
Krótko mówiąc, openssh-7 (.3) nie wysyła już (domyślnie, być może wcale) kluczy publicznych DSA.
Poniżej porównuję dane wyjściowe dwóch wersji openssh
/ usr / bin / ssh (stara wersja, lewa strona) i
/ opt / bin / ssh (nowa wersja, prawa strona) - polecenie to:
Podczas przeglądania poniższych danych wyjściowych mam nadzieję, że zauważysz, że kroki i komunikaty są zasadniczo takie same. Kluczowa różnica występuje po ciągu SSH2_MSG_SERVICE_ACCEPT
Chcę, abyście zauważyli, że stara wersja oferuje (i jest akceptowana przez „stary” serwer - parę kluczy opartą na DSA, podczas gdy nowy serwer nigdy nie oferuje klucza opartego na DSA.
Uwaga: „rozwiązaniem” tego problemu jest dodanie (przynajmniej jednej) pary kluczy PKI opartych na rsa, ecdsa lub ed25519.
źródło
ssh2
gdyby mnie zaakceptowali - głównie ze względu na łatwość wykonywaniascp
przelewów z tego samego okna cossh