Mieszasz uwierzytelnianie komputera serwera z komputerem klienta i uwierzytelnianie użytkownika na komputerze serwera.
Uwierzytelnianie serwera
Jedną z pierwszych rzeczy, które mają miejsce podczas nawiązywania połączenia SSH, jest to, że serwer wysyła swój klucz publiczny do klienta i udowadnia (dzięki kryptografii klucza publicznego ) klientowi, że zna powiązany klucz prywatny. Uwierzytelnia to serwer: jeśli ta część protokołu się powiedzie, klient wie, że serwer jest tym, za kogo się podaje.
Klient może sprawdzić, czy serwer jest znany, a nie jakiś nieuczciwy serwer próbujący podać go jako właściwy. SSH zapewnia jedynie prosty mechanizm weryfikacji legalności serwera: zapamiętuje serwery, z którymi już się łączyłeś, w ~/.ssh/known_hosts
pliku na komputerze klienta (istnieje również plik ogólnosystemowy /etc/ssh/known_hosts
). Przy pierwszym połączeniu z serwerem musisz sprawdzić w inny sposób, czy klucz publiczny przedstawiony przez serwer jest tak naprawdę kluczem publicznym serwera, z którym chcesz się połączyć. Jeśli masz klucz publiczny serwera, z którym chcesz się połączyć, możesz ~/.ssh/known_hosts
ręcznie dodać go do klienta.
Uwierzytelnienie serwera należy wykonać przed wysłaniem do niego poufnych danych. W szczególności, jeśli uwierzytelnienie użytkownika wymaga hasła, hasła nie można przesyłać do nieuwierzytelnionego serwera.
Uwierzytelnianie użytkownika
Serwer pozwala zdalnemu użytkownikowi zalogować się tylko wtedy, gdy ten użytkownik może udowodnić, że ma prawo dostępu do tego konta. W zależności od konfiguracji serwera i wyboru użytkownika użytkownik może przedstawić jedną z kilku form poświadczeń (poniższa lista nie jest wyczerpująca).
- Użytkownik może przedstawić hasło do konta, na które próbuje się zalogować; serwer następnie sprawdza, czy hasło jest prawidłowe.
- Użytkownik może przedstawić klucz publiczny i udowodnić, że posiada klucz prywatny powiązany z tym kluczem publicznym. Jest to dokładnie ta sama metoda, która jest używana do uwierzytelnienia serwera, ale teraz użytkownik próbuje udowodnić swoją tożsamość, a serwer je weryfikuje. Próba logowania jest akceptowana, jeśli użytkownik udowodni, że zna klucz prywatny, a klucz publiczny znajduje się na liście autoryzacji konta (
~/.ssh/authorized_keys
na serwerze).
- Inny rodzaj metody polega na delegowaniu części pracy związanej z uwierzytelnianiem użytkownika na maszynie klienta. Dzieje się tak w kontrolowanych środowiskach, takich jak przedsiębiorstwa, gdy wiele komputerów ma te same konta. Serwer uwierzytelnia komputer kliencki za pomocą tego samego mechanizmu, który jest używany odwrotnie, a następnie polega na kliencie w celu uwierzytelnienia użytkownika.