Gdzie są moje prywatne / publiczne klucze SSH w systemie UNIX?

17

Zaczynam rozumieć, jak działają RSA i systemy kluczy publicznych / prywatnych, i zastanawiałem się, gdzie są przechowywane moje prywatne i publiczne klucze SSH. Kiedy przechodzę do mojego katalogu domowego i przeglądam katalog .ssh (cd .ssh), widzę tylko plik „znane_hosty”, który, jak sądzę, zawiera klucze publiczne różnych zdalnych serwerów SSH, które znam.

Gdzie mogę znaleźć te klucze? Nawiasem mówiąc, nawet nie pamiętam ich tworzenia, ale skoro już wcześniej nawiązywałem połączenia ssh, muszą gdzieś być.

Używam OpenSSH_5.2p1 z systemem MAC OS 10.6.

Dzięki!

Michael Eilers Smith
źródło

Odpowiedzi:

15

~/.ssh/id_rsai ~/id_rsa.pubzwykle. Ale nie wynika z tego, że ssh musi utworzyć parę i zapisać je: ssh w zasadzie używa protokołu SSL, który ustanawia klucz sesji za pomocą algorytmu wymiany kluczy Diffie / Hellmana lub innego wariantu. Oznacza to, że uzgadnianie podczas konfigurowania połączenia generuje klucz sesji i odrzuca go po zakończeniu sesji.

Przeczytaj o algorytmie, jest całkiem sprytny: używając dość prostej matematyki, ustanawia klucz znany na obu końcach połączenia bez wysyłania klucza przez połączenie.

Charlie Martin
źródło
Czy to oznacza, że ​​jeśli nigdy nie zostałbym poproszony o wygenerowanie kluczy SSH, RSA nigdy nie byłby używany? Innymi słowy, że do udostępnienia klucza sesji użyto jakiegoś algorytmu asymetrycznego, ale tymczasowe klucze publiczne / prywatne połączenia nie zostały zapisane na moim komputerze?
Dokładnie tak. W rzeczywistości szyfrowanie jest symetryczne - algorytmy asymetryczne nie nadają się do przesyłania strumieniowego. Diffie-Hellman służy do generowania klucza sesji dla szyfrowania symetrycznego. Jeśli zamiast tego użyjesz pary kluczy publiczny / prywatny, zostaną one użyte w innym uścisku dłoni w celu utworzenia klucza sesji dla algorytmu symetrycznego.
Charlie Martin,
@mieli: Nie. Nigdy nie powstały. publickeyjest tylko jedną z wielu możliwych metod uwierzytelnienia; jeśli po prostu zalogowałeś się za pomocą passwordlub keyboard-interactive, samo hasło zostało wysłane. (Uwaga: nie należy mylić klucza użytkownika, klucza hosta i kluczy sesji).
user1686,
@grawity w większości się tutaj zgadzamy, ale bądźmy ostrożni. Wymiana klucza Diffie-Hellmana jest związana z RSA i innymi algorytmami szyfrowania asymetrycznego i jest zasadniczo asymetryczna, ponieważ obie strony wymiany mają własną „połowę” ostatecznej zgody. Oni zrobić dwie części klucza, a ewentualny klucz i dokładny proces zbudować to są odrzucane na koniec sesji. Nie są to jednak publiczne i prywatne części pary RSA.
Charlie Martin
4

Twoje osobiste publiczne i prywatne klucze ssh są zwykle przechowywane w:

$HOME/.ssh/id_dsa     (private key)
$HOME/.ssh/id_dsa.pub (public key)

Mogą być id_rsai id_rsa.pubjeśli utworzyłeś klucze RSA zamiast kluczy DSA (OpenSSH obsługuje oba formularze).

Ale fakt, że wcześniej ustanawiałeś połączenia ssh, nie oznacza, że ​​masz klucze ssh. Jeśli sshpolecenie nie może znaleźć twojego klucza osobistego, wyświetli monit o podanie hasła do zdalnego systemu. Jest to mniej bezpieczne niż używanie kluczy.

Zwykle powinieneś utworzyć swój prywatny klucz ssh za pomocą hasła. Jeśli utworzysz go bez hasła, osoba, która otrzyma kopię Twojego klucza prywatnego, może podszyć się pod Ciebie. ssh-agentpozwala używać klucza z hasłem bez konieczności ponownego wprowadzania hasła za każdym razem, gdy go używasz.

Keith Thompson
źródło
2

Jeśli nie utworzyłeś pary kluczy, prawdopodobnie nie masz takiej pary .

Ruch SSH2 jest szyfrowany przy użyciu symetrycznego klucza sesji ustanowionego przy użyciu algorytmów DH, ECDH lub wymiany kluczy GSSAPI. Ani klucz hosta, ani klucz użytkownika nie są używane do szyfrowania danych - ich jedynym celem jest uwierzytelnianie .

Teraz pamiętaj, że SSH obsługuje kilka metod uwierzytelniania: ponadto publickeyprawie wszystkie serwery akceptują proste passwordi / lub keyboard-interactive, w których nie ma miejsca generowanie ani użycie klucza - hasło jest po prostu wysyłane do zdalnego serwera w celu weryfikacji.

Innymi słowy, „skoro już wcześniej nawiązywałem połączenia ssh, muszą one gdzieś być” jest niepoprawne - para kluczy użytkownika nie jest konieczna do nawiązywania połączeń.


Jeśli nie stworzyć parę kluczy, to będzie prawdopodobnie w ~/.ssh/id_*- na przykład id_rsadla domyślnego RSA pary kluczy, id_ecdsadla ECDSA, id_dsadla DSA. Chociaż pliki te zawierają zarówno prywatną, jak i publiczną część pary kluczy, część publiczna jest zwykle automatycznie wyodrębniana do osobnego id_*.pubpliku dla wygody ( id_rsa.pubdla id_rsaitd.).

użytkownik1686
źródło