Gdy jawnie określasz plik tożsamości dla ssh:
ssh -i ./id_rsa ...
Mam te wiersze w śladzie debugowania ssh:
debug1: Offering public key: ./id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
Czy to znaczy, że generowany przez ssh id_rsa
zawiera również publiczny wykładnik RSA? id_rsa
format wydaje się raczej wyraźny, że zawiera klucz prywatny z blokiem „BEGIN PRIVATE KEY”, więc „oferowanie klucza publicznego” musi oznaczać coś innego niż „wysłanie klucza publicznego na serwer”.
EDYTOWAĆ:
Aby to wyjaśnić, chcę wiedzieć, co dokładnie dzieje się za linią „oferowanie klucza publicznego”. Jeśli klient ma wiele kluczy, wszystkie zostaną zaoferowane serwerowi jeden po drugim.
Odpowiedzi:
Aby połączyć się z serwerem SSH i uwierzytelnić za pomocą klucza publicznego / prywatnego, musisz najpierw udostępnić swój klucz publiczny serwerowi.
odbywa się to przez skopiowanie klucza publicznego dla swojego klucza prywatnego do serwera i dodanie go
~/ssh/authorized_keys
poprzez kopiuj / wklej, kopiowanieid_rsa.pub
, aby~/.ssh/authorized_keys
na serwerze lubcat id_rsa.pub >> ~/.ssh/authorized_keys
, dołączając go do listy.po nawiązaniu połączenia serwer używa klucza publicznego do podpisania wyzwania, a klient używa klucza prywatnego
id_rsa
do odszyfrowania wyzwania, ponownego zaszyfrowania go przy użyciu publicznego serwerahost key
i odesłania go z powrotem.host sprawdza, czy poprawnie odszyfrowałeś wyzwanie, odszyfrowując odpowiedź za pomocą klucza prywatnego, a klient / host nawiązuje szyfrowane połączenie na podstawie udostępnionych danych, a nie na kluczach publicznych / prywatnych.
pod ŻADNYM PUNKTEM w wymianie nie jest twój klucz prywatny lub klucz prywatny hosta wymieniony lub ujawniony sobie nawzajem. twój klucz publiczny jest przechowywany na serwerze, ale dlatego jest to klucz PUBLICZNY.
źródło
ssh -i keyname
, mówisz klientowi ssh dokładnie, jakiego klucza chcesz użyć do połączenia z serwerem. jeśli masz kilkanaście kluczy w~/.ssh/
swoim kliencie, NIE będzie iterować po każdym z nich. będzie szukał~/.ssh/id_rsa
,~/.ssh/id_dsa
potencjalnie kilku innych nazw plików, które są zakodowane w kliencie, lub jaki klucz jest określony dla tego hosta w~/.ssh/config
... długiej historii; twój klient nie oferuje / oferuje / żadnych kluczy do serwera.~/.ssh/authorized_keys
na hoście wie, jakie jest wyzwanie i jak wygląda ponieważ, kiedy klucz publiczny odblokuje go, będzie wiedział, jak go użyć.Kryptografia klucza publicznego / prywatnego oparta jest na bardzo prostym systemie:
Masz klucz publiczny, który jest zdolny do szyfrowania jednokierunkowego oraz klucz prywatny, który jest zdolny de Cryption. Klucz publiczny można następnie przekazać każdemu na świecie i nikt nie będzie w stanie odszyfrować zaszyfrowanych danych, chociaż BĘDĄ one w stanie zaszyfrować dane, które można odszyfrować za pomocą klucza prywatnego.
Odpowiedź na twoje pytanie brzmi: „Twój klucz publiczny”.
źródło
Nie sądzę, że powinienem w tym momencie wysyłać klucz publiczny lub prywatny. Klient powinien wykonać szyfrowanie przy użyciu klucza prywatnego w postaci zwykłego tekstu, który jest już znany serwerowi. Host może odszyfrować tę wiadomość za pomocą klucza publicznego, wiedząc, że jedynym, który mógł ją poprawnie zaszyfrować, jest klient, który przechowuje odpowiedni klucz prywatny, tym samym uwierzytelniając klienta.
Wierzę, że to mówi,
Offering public key: ./id_rsa
ponieważ używa klucza prywatnego (przechowywanego w./id_rsa
) do wykonania szyfrowania tekstu jawnego znanego przez serwer, a następnie serwer użyje klucza publicznego do odszyfrowania tego tekstu zaszyfrowanego i potwierdzenia, że pasuje on do tekstu jawnego. Plik klucza publicznego./id_rsa.pub
nigdy nie powinien być potrzebny klientowi po początkowym wygenerowaniu klucza. Jest to używane tylko przez serwer do deszyfrowania.źródło