ssh nie może negocjować - nie znaleziono pasującej metody wymiany kluczy

32

Próbuję zalogować się do routera DSL, ponieważ mam problem z pocztą wiersza polecenia. Mam nadzieję, że będę mógł ponownie skonfigurować router.

Kiedy wydam sshpolecenie, dzieje się tak:

$ ssh [email protected]

Unable to negotiate with 10.255.252.1 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1

więc wtedy spojrzałem na ten post wymiany stosu i zmodyfikowałem moje polecenie do tego, ale mam inny problem, tym razem z szyframi.

$ ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 [email protected]

Unable to negotiate with 10.255.252.1 port 22: no matching cipher found. Their offer: 3des-cbc

więc czy istnieje polecenie oferujące 3des-cbc szyfrowanie? Nie jestem pewien co do 3des, na przykład, czy chcę dodać go na stałe do mojego systemu.

Czy istnieje polecenie pozwalające na 3des-cbcszyfr?

Jaki jest tutaj problem? To nie prosi o hasło.

j0h
źródło
1
Być może już tu
Eduardo Baitello,
1
Ssh ma wiele różnych algorytmów szyfrowania, których może używać, i nie ma jednego wspólnego między klientem a serwerem. Spróbuj ssh -o KexAlgorithms=diffe-hellman-group-sha1 [email protected]wymusić na kliencie użycie starszego, mniej bezpiecznego algorytmu i sprawdź, czy router ma nowsze oprogramowanie układowe.
icarus
1
ssh -vvv ...ujawni wszystkie protokoły wymiany kluczy i szyfrów oferowane przez serwer.
David Foerster,

Odpowiedzi:

47

Ten konkretny błąd występuje podczas konfigurowania szyfrowanego kanału. Jeśli twój system i system zdalny nie współużytkują co najmniej jednego szyfru, nie ma szyfru do uzgodnienia i żaden szyfrowany kanał nie jest możliwy. Zazwyczaj serwery SSH oferują niewielką garść różnych szyfrów w celu zaspokojenia potrzeb różnych klientów; Nie jestem pewien, dlaczego serwer zostałby skonfigurowany tak, aby zezwalał tylko na 3DES-CBC.

Teraz 3DES-CBC nie jest straszny. Jest powolny i zapewnia mniejsze bezpieczeństwo niż niektóre inne algorytmy, ale nie można go natychmiast złamać, dopóki klucze są odpowiednio wybrane. Sam CBC ma pewne problemy z modyfikowaniem tekstu zaszyfrowanego w tranzycie, ale mocno podejrzewam, że wynikowe uszkodzenie zostanie odrzucone przez HMAC SSH, zmniejszając jego wpływ. Podsumowując, istnieją gorsze wybory niż 3DES-CBC i są lepsze. Zawsze należy jednak postępować ostrożnie, zastępując wartości domyślne związane z bezpieczeństwem, w tym wybór algorytmu szyfrowania i wymiany kluczy.Te wartości domyślne są domyślne z jakiegoś powodu; niektórzy całkiem sprytni ludzie poświęcili trochę mocy mózgu, biorąc pod uwagę opcje i ustalili, że to, co wybrano jako domyślne, zapewnia najlepsze ogólne bezpieczeństwo w porównaniu do kompromisu wydajności.

Jak się dowiedziałeś, możesz użyć -c ...(lub -oCiphers=...), aby określić, który szyfr zaoferować po stronie klienta. W takim przypadku dodanie -c 3des-cbcpozwala tylko 3DES-CBC od klienta. Ponieważ odpowiada to szyfrowi oferowanemu przez serwer, można ustanowić szyfrowany kanał, a połączenie przechodzi do fazy uwierzytelniania.

Możesz także dodać to do swoich osobistych ~/.ssh/config. Aby uniknąć globalnej zmiany w celu rozwiązania lokalnego problemu, możesz wprowadzić go w błąd Host. Na przykład, jeśli twoja konfiguracja SSH mówi obecnie (fikcyjny przykład):

Port 9922

określając globalny domyślny port 9922 zamiast domyślnego 22, możesz dodać sekcję hosta dla hosta wymagającego specjalnej konfiguracji oraz globalną sekcję hosta dla przypadku domyślnego. To byłoby coś w stylu ...

Host 10.255.252.1
    Ciphers 3des-cbc
    KexAlgorithms +diffie-hellman-group1-sha1
Host *
    Port 9922

Wcięcie jest opcjonalne, ale uważam, że znacznie poprawia czytelność. Puste linie i linie zaczynające się od #są ignorowane.

Jeśli zawsze (lub głównie) logujesz się jako ten sam użytkownik w tym systemie, możesz także podać tę nazwę użytkownika:

Host 10.255.252.1
    Ciphers 3des-cbc
    KexAlgorithms +diffie-hellman-group1-sha1
    User enduser
Host *
    Port 9922

Nie musisz dodawać Host *zwrotki, jeśli na początku nie było nic w ~ / .ssh / config, ponieważ w takim przypadku byłyby to tylko domyślne ustawienia systemowe lub systemowe (zwykle z / etc / ssh / ssh_config) używany.

W tym momencie linia komend ssh do połączenia z tym hostem ogranicza się do zwykłego

$ ssh 10.255.252.1

i wszyscy inni użytkownicy w twoim systemie oraz połączenia ze wszystkimi innymi hostami z twojego systemu, zmiany nie mają wpływu.

CVn
źródło
W moim przypadku musiałem usunąć Cipherlinię, ale potem zadziałało! Dzięki!
carlspring
Według strony podręcznika ssh_config ( link ) składnia pliku konfiguracyjnego dla szyfrów to „Cipher s ” (zwróć uwagę na końcowe s).
MikeV,
28

Ok, przeczytałem stronę podręcznika i zorientowałem się.

Nie chciałem modyfikować mojego pliku konfiguracyjnego, więc szukałem terminu „szyfr” na stronie podręcznika, która pokazała mi -copcję; pozwala mi to określić typ szyfrowania. polecenie zakończenia było wtedy:

ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -c 3des-cbc [email protected]
j0h
źródło
4
Ostrożnie wybieraj szyfr za pomocą ręki, możesz bardzo łatwo wybrać słabszy (er), chyba że wiesz, co robisz (usability i in.).
heemayl
Ditto @heemayl. 3DES-CBC nie jest taki zły, ale istnieją szyfry obsługiwane przynajmniej przez najnowsze wersje OpenSSH, które są całkowicie zepsute. Stąpaj ostrożnie.
CVn
3

Ostatnio napotkałem ten problem przy użyciu PuTTY do połączenia z nowszą wersją Ubuntu. Wydaje się, że wcześniejsze wersje PuTTY nie miały zaktualizowanych szyfrów. Pobranie najnowszej wersji PuTTY naprawiło problem. To może być inne rozwiązanie.

Trent Three
źródło
1
Chociaż często routery nie są aktualizowane lub bardzo dobrze obsługiwane przez producentów.
Guy
0

Inna odpowiedź dla systemów MacOSX i CLI (na przykład SFTP): zapoznaj się z tym artykułem @ http://www.openssh.com/legacy.html (starsze opcje OpenSSL). Otrzymywałem stały błąd „nie można negocjować”, który został rozwiązany przez informacje w tym artykule, w szczególności ustawienie parametru konfiguracyjnego w pliku „~ / .ssh / config”.

BTW, dostałem ten błąd, kiedy mój docelowy serwer SFTP (nie pod moją administracją) ostatecznie wyłączył TLS 1.0 (opcja szyfrowania SSL) i wymaga TLS 1.1 lub 1.2.

Charlie L.
źródło