Uwierzytelnianie kluczem publicznym i przekazywanie agenta
Proszę poznać authorized_keys, klucze Ed25519 i RSA oraz konsekwencje bezpieczeństwa przekazywania agenta SSH.
Uwierzytelnianie kluczem publicznym i przekazywanie agenta to bezpłatna lekcja Cryptology Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cryptology Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cryptology Academy zawiera 4 lekcji w sumie.
Format pliku authorized_keys
Uwierzytelnianie kluczem publicznym SSH opiera się na pliku authorized_keys, zwykle znajdującym się na serwerze w lokalizacji ~/.ssh/authorized_keys. Każdy wiersz zawiera klucz publiczny w formacie: algorithm base64-key comment. Serwer sprawdza, czy klient może dowieść posiadania odpowiadającego mu klucza prywatnego przez podpisanie wyzwania.
Generowanie kluczy SSH za pomocą ssh-keygen
Polecenie ssh-keygen tworzy pary kluczy do uwierzytelniania. Uruchomienie ssh-keygen -t ed25519 generuje nowoczesną parę kluczy Ed25519. Można określić komentarz za pomocą -C w celu identyfikacji, na przykład adres e-mail. Narzędzie domyślnie zapisuje klucz prywatny (id_ed25519) i klucz publiczny (id_ed25519.pub) w ~/.ssh.
Porównanie typów kluczy: RSA, ECDSA, Ed25519
Klucze RSA o długości 4096 bitów są bardzo kompatybilne ze starszymi systemami, ale wolniej wykonują podpisy. ECDSA z NIST P-256 działa szybciej i tworzy mniejsze podpisy, lecz niektórzy kryptografowie kwestionują dobór parametrów krzywej NIST. Ed25519 oparty na Curve25519 to obecnie najlepsza praktyka: zapewnia szybkość, małe klucze i podpisy, nie ma znanych słabości i jest dostępny we wszystkich nowoczesnych implementacjach SSH.
Klucze prywatne chronione hasłem
Plik klucza prywatnego powinien być chroniony hasłem. ssh-keygen szyfruje klucz prywatny za pomocą klucza wyprowadzonego z hasła (w przypadku nowoczesnych kluczy używany jest bcrypt), dzięki czemu napastnik, który wykradnie plik, nie może go użyć bez hasła. Bez hasła każda osoba mająca dostęp do pliku może uwierzytelnić się jako użytkownik na dowolnym serwerze przechowującym odpowiadający mu klucz publiczny.
ssh-agent do zarządzania kluczami
Demon ssh-agent przechowuje odszyfrowane klucze prywatne w pamięci podczas sesji logowania. Klucz ładuje się za pomocą ssh-add ~/.ssh/id_ed25519, a program prosi wtedy o hasło. Kolejne połączenia SSH proszą agenta o podpisanie wyzwań bez ponownego wpisywania hasła, łącząc bezpieczeństwo z wygodą.
Jak ssh-agent podpisuje wyzwania
Gdy serwer SSH wysyła wyzwanie uwierzytelniające, klient SSH przekazuje zadanie podpisania ssh-agentowi za pośrednictwem gniazda uniksowego. Agent wykonuje podpis kryptograficzny przy użyciu klucza prywatnego przechowywanego w pamięci i zwraca wyłącznie podpis. Bajty klucza prywatnego nigdy nie opuszczają procesu agenta, nawet nie trafiają do samego klienta SSH.
Przekazywanie agenta: możliwości i ryzyko
Przekazywanie agenta (ForwardAgent yes lub ssh -A) pozwala zdalnej sesji SSH korzystać z lokalnego agenta w celu dalszego uwierzytelniania. Jest to przydatne podczas łączenia się przez hosty bastionowe, ponieważ nie trzeba kopiować kluczy prywatnych na bastion. Jeśli jednak bastion zostanie przejęty, użytkownik root może uzyskać dostęp do gniazda agenta i uwierzytelnić się w Państwa imieniu na dowolnym serwerze.
ProxyJump a ForwardAgent w przypadku bastionów
ProxyJump (ssh -J bastion target) jest bezpieczniejszą alternatywą dla ForwardAgent podczas uzyskiwania dostępu przez host bastionowy. Tworzy tunel TCP przez bastion bez ujawniania tam gniazda agenta. Serwer docelowy otrzymuje bezpośrednie połączenie od lokalnego klienta, a bastion jedynie przekazuje zaszyfrowane bajty TCP i nie może użyć poświadczeń.
Uwierzytelnianie certyfikatami SSH
SSH obsługuje uwierzytelnianie oparte na certyfikatach, w którym urząd certyfikacji (CA) podpisuje klucze publiczne hostów i użytkowników. Zamiast rozpowszechniać pojedyncze klucze publiczne na każdym serwerze, konfiguruje się serwery tak, aby ufały urzędowi CA. Podpisany certyfikat użytkownika zapewnia dostęp do wszystkich serwerów ufających temu CA, a certyfikat może zawierać opcjonalny termin wygaśnięcia i ograniczenia principal.
ssh-keyscan do zbiorczego pobierania kluczy
Narzędzie ssh-keyscan łączy się z jednym lub wieloma hostami i pobiera ich publiczne klucze hosta bez uwierzytelniania. Jest to przydatne podczas automatyzacji uzupełniania plików known_hosts w skryptach wdrożeniowych. Wynik można bezpośrednio przekierować do pliku known_hosts: ssh-keyscan -H example.com >> ~/.ssh/known_hosts.
Podsumowanie przebiegu uwierzytelniania kluczem
Uwierzytelnianie kluczem publicznym przebiega następująco: klient wysyła klucz publiczny, serwer sprawdza authorized_keys, serwer wysyła wyzwanie powiązane z identyfikatorem sesji, klient (za pośrednictwem agenta) podpisuje je kluczem prywatnym, a serwer weryfikuje podpis przy użyciu zapisanego klucza publicznego. Jeśli podpis jest prawidłowy, uwierzytelnianie kończy się powodzeniem bez przesyłania żadnego tajnego poświadczenia.
Wybór typu klucza SSH
Który typ klucza SSH jest obecnie zalecaną praktyką w nowych wdrożeniach ze względu na szybkość, niewielki rozmiar klucza i silne właściwości bezpieczeństwa?
Podsumowanie uwierzytelniania kluczem publicznym
Najważniejsze informacje: klucze publiczne należy przechowywać w authorized_keys, klucze prywatne chronić hasłami, używać ssh-agent do przechowywania odszyfrowanych kluczy w pamięci, preferować typ klucza Ed25519, używać ProxyJump zamiast ForwardAgent podczas dostępu przez bastion, aby uniknąć ujawnienia gniazda agenta, oraz rozważyć certyfikaty SSH na potrzeby skalowalnego zarządzania dostępem.
Ucz się Cryptology Academy dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 67
- Lekcje
- 261
Często zadawane pytania
Czy lekcja „Uwierzytelnianie kluczem publicznym i przekazywanie agenta” jest bezpłatna?
Tak — pełny tekst „Uwierzytelnianie kluczem publicznym i przekazywanie agenta” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cryptology Academy, przejdź na CoddyKit PRO. Kurs Cryptology Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Uwierzytelnianie kluczem publicznym i przekazywanie agenta”?
Proszę poznać authorized_keys, klucze Ed25519 i RSA oraz konsekwencje bezpieczeństwa przekazywania agenta SSH. Ćwiczysz Cryptology Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Cryptology Academy?
Nie wymagamy żadnego doświadczenia. Cryptology Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Uwierzytelnianie kluczem publicznym i przekazywanie agenta”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Cryptology Academy?
Tak. Każda lekcja Cryptology Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Uzgadnianie SSH i uwierzytelnianie kluczem hosta
- Uwierzytelnianie kluczem publicznym i przekazywanie agenta
- Tunelowanie SSH i techniki przekierowywania portów
- Hartowanie SSH i najlepsze praktyki audytowe