Jak zmusić SSH do podania klucza RSA zamiast ECDSA?


16

Jak przy pierwszym dostępie do serwera mogę zmusić SSH do przekazania mi klucza RSA i automatycznego zapisania go, jeśli użytkownik wyrazi zgodę?

Obecnie oferuje mi klucz ECDSA. Ponieważ znam już klucz RSA, wolałbym zobaczyć klucz RSA przedstawiony w tym miejscu.

Próbowałem:

ssh -o RSAAuthentication=yes user@server

Niestety daje mi to klucz ECDSA i Are you sure you want to continue connecting (yes/no)?komunikat.


Mam podobną sytuację. Serwer A. Klient B. W systemie B: ssh A najpierw poprosi o klucz. Na Cleint C: ssh A najpierw poprosi o podanie hasła, po nieudanej próbie użycia klucza ECDSA przez klienta C, zobaczyłem to w dzienniku A. Jeśli wstępnie załaduję klucz rsa na C, to ssh A połączy się szczęśliwie . Jak zapobiec używaniu przez C klucza ECDSA jako pierwszej próby?
Kemin Zhou

Odpowiedzi:


14

Usuwając algorytmy ECDSA ze HostKeyAlgorithmszmiennej konfiguracyjnej.

ssh -o HostKeyAlgorithms=ssh-rsa-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-dss-cert-v00@openssh.com,ssh-rsa,ssh-dss user@server

Po prostu usunąłem wszystkie algorytmy ECDSA z domyślnej listy .

Możesz oczywiście umieścić to w swoim .ssh/configkomputerze:

Host: server
    HostKeyAlgorithms ssh-rsa-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-dss-cert-v00@openssh.com,ssh-rsa,ssh-dss

W przypadku OpenSSL, 1) po hoście nie ma dwukropka, a 2) domyślna lista wydaje się zmienić od czasu opublikowania tego. Spróbuj HostKeyAlgorithms ssh-rsa-cert-v01@openssh.com,ssh-rsazamiast tego.
cowlinator

6

Nie używaj RSA, ponieważ ECDSA jest nową wartością domyślną.

Na serwerze zrób to: ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub i zapisz ten numer.

Na kliencie możesz połączyć się z hostem SSH, a jeśli zobaczysz ten sam numer, możesz odpowiedzieć Are you sure you want to continue connecting (yes/no)?twierdząco. Następnie klucz ECDSA zostanie zapisany na kliencie do wykorzystania w przyszłości.


3
tak, ale co, jeśli mam starą aplikację, która wymaga RSA do zachowania zgodności, dopóki nie zostanie podjęta decyzja biznesowa o aktualizacji do ecdsa?
entuzjastyczny

@RobertSiemer tylko oryginalny plakat z pytaniami może zmienić zaakceptowaną odpowiedź. Nie jestem w stanie tego zrobić.
entuzjastyczny

1
H2ONaCl: zmień zaakceptowaną odpowiedź. Ten nie robi tego, o co prosiłeś. @enthusiasticgeek przepraszam, mixup.
Robert Siemer

Domyślne (odwołanie do władzy) i nowe (odwołanie do nowości) niekoniecznie oznacza lepsze. RSA jest nadal uważane za silne ... tylko odrobinę do 4096, jeśli chcesz więcej siły (2048 może być wkrótce przestarzały). A jeśli chcesz mieć dobre algo EC, użyj ed25519. ECDSA jest do bani, ponieważ wykorzystuje słabe krzywe NIST, które mogą być nawet cofnięte; od pewnego czasu jest to dobrze znany problem. Aby wesprzeć starszą wersję, włącz RSA, a dla idealnego algo użyj ed25519 ... zawsze wyłącz DSA, który jest długo przestarzały (głównym powodem jest ustalony rozmiar klucza 1024-bitowego), a także wyłącz ECDSA. Spróbuj ssh-audit, aby uzyskać więcej.
Peter

5

Tak, OK wkrótce przełącz się na ECDSA, ale w międzyczasie spróbuj tego:

ssh -o HostKeyAlgorithms=ssh-rsa -o FingerprintHash=md5 user@example.com

To daje „Złą opcję konfiguracji: fingerprinthash” w moim systemie (OpenSSH_6.6.1p1).
Soren Bjornstad,

1
@ SorenBjornstad, FingerprintHashopcja jest niepotrzebna, po prostu zostaw całą tę część wyłączoną.
Lucas,

2

Właśnie dodałem tę linię

HostKeyAlgorithms ssh-rsa

do

/etc/ssh/sshd_conf

i działa dobrze w tej wersji.

OpenSSH_7.7p2 ubuntu-4ubuntu2.2

1

Aby poprawić odpowiedź tumbleweed, która zawiera martwy link do znalezienia starej listy algorytmów.

Najpierw zdecyduj o liście algorytmów. Aby znaleźć starą listę, użyj ssh -vv:

ssh -vv somehost

I poszukaj 2 wierszy, takich jak „algorytmy klucza hosta: ...”, gdzie pierwsza wydaje się być ofertą serwera, a druga jest ofertą klienta. Lub, aby automatycznie wybrać te 2 linie, spróbuj tego (i aby wyjść, naciśnij Ctrl + D):

ssh -vv somehost 2>&1 | grep "host key algorithms:"

Teraz odfiltruj to ... powinieneś usunąć wszystkie dss / dsa, ponieważ są one już przestarzałe, a także chciałeś usunąć ecdsa (tak jak ja), więc na przykład, jeśli:

ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

Powinieneś skończyć z:

ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

Teraz edytuj konfigurację. Dla własnej konfiguracji:

vim ~/.ssh/config

W przypadku konfiguracji ogólnosystemowej:

sudo vim /etc/ssh/ssh_config

Dodaj nową linię globalnie:

HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

lub dla konkretnego hosta (nie idealny do konfiguracji całego serwera):

Host somehost
    HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

Zamiast listy, którą ssh -vvwpisałem , wklej listę uzyskaną z danych wyjściowych, nie włączając części „algorytmy klucza hosta:”.


0

niektóre punkty są mylące, ponieważ możliwe jest usunięcie algorytmów kluczy z istniejących wartości domyślnych - Kluczami najwyższego poziomu są nowe klucze RSA-sha2 / 256/512 i ed25519 dla najlepszego bezpieczeństwa za pomocą ssh-keygen -t ras -a -b 4096 -a 113 do gen. Obsługa starszych wersji najwyraźniej czyta wiadomości ssh, że ssh1 zniknie całkowicie - jego 45-bitowe i 96-bitowe maks. Klucze dsa również przestarzałe zostały wyeliminowane. Naprawiono na 128/1024 bit max, który można zhakować. (możliwe, że NSA to zrobiła i kiepski / usprawiedliwiony, ponieważ kod debugowania pozostawiał bardzo wątpliwości, że nazewnictwo go zabrzmiało serdecznie), więc wszystkie płatne, bezpieczne struktury klucza RSA muszą zostać przerobione, aby wspierać i utrzymywać wyższe standardy w przyszłości. ustaw, jakich kluczy chcesz używać, jak opisano w / etc / ssh / sshd_config, spróbuj też zrobić 2-kluczowy auth 3 klucz też działa, np .: sshd_config "AuthenticationMethods publickey, publickey, publickey" - upewnij się, że ssh -Q kex pasuje do obu serwerów A i B lub komputerów stacjonarnych, ponieważ na przykład można zrobić różnicę na ich danych wyjściowych - i upewnij się, że te same algorytmy kluczowania exhng są zgodne. Kluczami ecdsa nowszymi w produkcji są również słabe kino, których nie należy używać. lub get - keyexchange odmówił bezpiecznego dostępu częściowego. Wiele dobrych infoz tylko cierpliwych do przeszukania.


2
Czy możesz spróbować rozbić tę ścianę tekstu, aby łatwiej było naśladować? Skorzystaj z przewodnika po formatowaniu i sformatuj kod oraz zawartość pliku tekstowego jako kod, a jeśli to wszystko wyjaśni, umieść je w osobnych wierszach. Z przyjemnością zredagowałbym twoją odpowiedź, gdybym mógł ją zastosować, ale nie mogę.
Zanna,

-5

Lub jeśli nalegasz na stosowanie klucza RSA, możesz wpisać ssh-keygen -t rsana serwerze, do którego zamierzasz SSH.

Powinno to generować klucze publiczne i prywatne RSA pod „~ / .ssh / id_rsa”. Teraz wystarczy skopiować klucz publiczny $HOME/.ssh/authorized_keysna wszystkich komputerach, z których zamierzasz ssh na maszynę, na której wygenerowałeś klucze RSA.

A potem usiądź i zrelaksuj się!


1
Zdajesz sobie sprawę, że pytanie nie dotyczyło klucza po stronie klienta, ale klucza serwera?
0xC0000022L,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.