Jak dodać klucz SSH w systemie Linux? Generowanie i konfiguracja krok po kroku
Ten poradnik piszemy z perspektywy praktyka — w Nodea codziennie konfigurujemy dostęp SSH na serwerach Bare Metal i Public Cloud w ramach usługi administracji Linux. Pokażemy krok po kroku, jak na Ubuntu, Debianie i CentOS wygenerować parę kluczy, dodać klucz publiczny na serwer i przetestować logowanie bez hasła. Wszystkie komendy są gotowe do skopiowania.
Co to jest klucz SSH i jak działa logowanie kluczem?
Klucz SSH to para plików — klucz publiczny i klucz prywatny — która pozwala zalogować się na serwer Linux bez podawania hasła. Klucz SSH zastępuje logowanie hasłem i jest odporny na ataki siłowe, bo klucza kryptograficznego nie da się zgadnąć. Para dzieli się na dwa pliki:
- klucz publiczny umieszczasz na serwerze i możesz go swobodnie udostępniać,
- klucz prywatny zostaje na Twoim komputerze i nigdy nikomu go nie udostępniasz.
Sam SSH (protokół SSH) to szyfrowane połączenie z serwerem — logowanie kluczem jest w nim bezpieczniejsze niż hasłem. Mechanizm działa prosto: serwer przechowuje Twój klucz publiczny, a przy logowaniu sprawdza, czy posiadasz pasujący klucz prywatny. Jeśli oba pliki do siebie pasują, serwer wpuszcza Cię bez pytania o hasło — bez wysyłania jakiegokolwiek sekretu przez sieć.
Stąd odpowiedź na trzy typowe pytania. Klucz publiczny SSH to plik id_rsa.pub, który umieszczasz na serwerze i możesz udostępniać. Klucz prywatny (id_rsa) zostaje u Ciebie i jest tajny. A dlaczego to bezpieczniejsze niż hasło? Hasło można złamać atakiem siłowym, klucza prywatnego o długości tysięcy bitów — nie. Więcej o samym protokole znajdziesz w naszym haśle SSH.
Wygeneruj klucz SSH poleceniem ssh-keygen
Jak wygenerować klucz SSH na Linuxie? Otwórz terminal i wpisz polecenie ssh-keygen -t rsa -b 4096 — utworzy ono parę kluczy 4096-bitowych w katalogu ~/.ssh. Podstawowa i rozszerzona wersja komendy wyglądają tak:
- ssh-keygen — wersja podstawowa, z domyślnymi parametrami,
- ssh-keygen -t rsa -b 4096 -C "twoj_email@domena.com" — z wybranym typem, długością i komentarzem.
Parametry oznaczają kolejno: -t rsa to typ klucza (algorytm RSA), -b 4096 to długość w bitach, a -C dodaje komentarz (najczęściej e-mail) ułatwiający później rozpoznanie klucza. Komentarz jest opcjonalny.
Podczas generowania system zada dwa pytania. Najpierw o lokalizację pliku — domyślnie ~/.ssh/id_rsa, zatwierdź Enterem. Potem o hasło do klucza (passphrase), które również możesz zostawić puste. W terminalu zobaczysz mniej więcej to:
- Enter file in which to save the key (/home/user/.ssh/id_rsa):
- Enter passphrase (empty for no passphrase):
- Your identification has been saved in /home/user/.ssh/id_rsa
- Your public key has been saved in /home/user/.ssh/id_rsa.pub
Po zakończeniu w katalogu ~/.ssh znajdziesz dwa pliki: klucz prywatny id_rsa oraz klucz publiczny id_rsa.pub. RSA to nie jedyny typ klucza — dostępne komendy SSH to także ssh-copy-id (kopiowanie na serwer) i ssh (łączenie), które opisujemy w kolejnych sekcjach. Wybór algorytmu rozwijamy niżej.
Sprawdź, czy nie masz już klucza SSH
Zanim wygenerujesz nowy klucz SSH, sprawdź, czy już go nie masz — wpisz ls -al ~/.ssh w terminalu. Polecenie wypisze zawartość katalogu z kluczami.
- Jeśli w wyniku widzisz pliki id_rsa i id_rsa.pub (albo id_ed25519 i id_ed25519.pub) — klucz już istnieje.
- Generowanie nowego klucza w tej samej lokalizacji nadpisze stary bez ostrzeżenia — wtedy dostęp oparty na poprzednim kluczu przestanie działać.
Jeśli klucz już masz i nadal go używasz, przejdź od razu do sekcji o kopiowaniu klucza publicznego na serwer.
Ustaw hasło do klucza prywatnego (passphrase)
Hasło do klucza prywatnego (passphrase) chroni Twój klucz, gdyby plik id_rsa dostał się w niepowołane ręce — bez hasła nikt go nie użyje. Passphrase podajesz podczas generowania, w odpowiedzi na pytanie Enter passphrase.
- Passphrase jest opcjonalne, ale zalecane na stacjach roboczych.
- Bez hasła każdy, kto zdobędzie plik klucza prywatnego, zaloguje się na Twój serwer.
- Pole zostaw puste (sam Enter), jeśli klucz ma działać w automatyzacji, np. w skryptach wdrożeniowych czy zadaniach cron, gdzie nikt nie wpisze hasła ręcznie.
Jakie typy kluczy SSH wybrać — RSA czy ED25519?
Klucz SSH występuje w dwóch popularnych typach: RSA (minimum 2048 bitów, zalecane 4096) oraz ED25519 (stała długość 256 bitów). ED25519 jest nowszy i szybszy, RSA jest szerzej obsługiwany przez starsze systemy. Komendy generujące oba typy to:
- RSA: ssh-keygen -t rsa -b 4096
- ED25519: ssh-keygen -t ed25519
Poniższa tabela pomoże wybrać właściwy typ:
- RSA — długość 2048 lub 4096 bitów; wolniejszy; maksymalna kompatybilność, także ze starszymi serwerami; wybierz, gdy potrzebujesz pewności, że klucz zadziała wszędzie.
- ED25519 — stała długość 256 bitów; szybszy i z krótszym kluczem przy porównywalnym bezpieczeństwie; wybierz dla nowych systemów i współczesnych dystrybucji Linuksa.
Rekomendacja w dwóch zdaniach: dla nowych serwerów wybierz ED25519 — jest szybszy i nowocześniejszy. Gdy musisz obsłużyć starsze systemy lub urządzenia sieciowe, zostań przy SSH RSA o długości 4096 bitów.
Dodaj klucz publiczny na serwer Linux
Aby dodać klucz SSH na serwer Linux, skopiuj klucz publiczny do pliku ~/.ssh/authorized_keys na serwerze — najprościej poleceniem ssh-copy-id user@adres_ip_serwera. Komenda sama utworzy katalog .ssh, dopisze klucz i ustawi uprawnienia.
W miejsce user wstaw nazwę użytkownika na serwerze, a w miejsce adres_ip_serwera — adres IP lub nazwę hosta. Metoda automatyczna wygląda tak:
- Wpisz ssh-copy-id user@adres_ip_serwera.
- Podaj hasło do konta na serwerze (to ostatni raz, gdy je wpisujesz).
- ssh-copy-id skopiuje Twój klucz publiczny SSH do pliku authorized_keys na serwerze.
Jeśli ssh-copy-id nie jest dostępne (spotyka się to na minimalnych obrazach serwera), skopiuj klucz ręcznie jednym poleceniem:
- cat ~/.ssh/id_rsa.pub | ssh user@adres_ip_serwera "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Ta komenda wysyła zawartość pliku id_rsa.pub przez SSH i dopisuje go do authorized_keys, tworząc wcześniej katalog ~/.ssh, jeśli go nie było. Obie metody prowadzą do tego samego efektu: Twój klucz publiczny SSH trafia do pliku ~/.ssh/authorized_keys na serwerze, czyli listy kluczy, którym serwer ufa. Poprawna konfiguracja tego pliku to standard, który w Nodea wdrażamy na serwerach Bare Metal i Public Cloud. Jeśli obok SSH kopiujesz też pliki, zobacz, jak połączyć się z kontem FTP.
Ustaw poprawne uprawnienia do katalogu i pliku klucza
Serwer SSH odmówi logowania kluczem, jeśli katalog ~/.ssh i plik authorized_keys mają zbyt luźne uprawnienia — ustaw chmod 700 ~/.ssh oraz chmod 600 ~/.ssh/authorized_keys. Wykonaj obie komendy na serwerze:
- chmod 700 ~/.ssh — katalog dostępny tylko dla właściciela.
- chmod 600 ~/.ssh/authorized_keys — plik z kluczami do odczytu i zapisu wyłącznie przez właściciela.
Demon SSH świadomie odrzuca klucze, gdy uprawnienia są zbyt szerokie — to zabezpieczenie przed sytuacją, w której inny użytkownik serwera mógłby dopisać własny klucz. To najczęstszy powód, dla którego „wszystko zrobiłem, a klucz nie działa". Zdanie diagnostyczne do zapamiętania: jeśli logowanie prosi o hasło mimo dodanego klucza — sprawdź uprawnienia katalogu ~/.ssh i pliku authorized_keys.
Przetestuj logowanie SSH kluczem bez hasła
Aby sprawdzić, czy klucz SSH działa, połącz się z serwerem poleceniem ssh user@adres_ip_serwera — jeśli konfiguracja jest poprawna, zalogujesz się bez podawania hasła. Logowanie SSH kluczem powinno przebiec błyskawicznie i od razu wrzucić Cię do powłoki serwera.
- Sukces to zalogowanie bez pytania o hasło serwera (jeśli klucz nie ma passphrase).
- Jeśli ustawiłeś passphrase, system poprosi o hasło do klucza — nie o hasło serwera. To istotna różnica.
- Jeśli serwer nadal pyta o hasło serwera mimo dodanego klucza, wróć do sekcji o uprawnieniach i sprawdź chmod na ~/.ssh oraz authorized_keys.
Ta różnica myli początkujących: „hasło serwera" to hasło konta na serwerze, a „hasło do klucza (passphrase)" to hasło szyfrujące lokalny plik id_rsa. Jeśli po dodaniu klucza system prosi o passphrase, to znaczy, że klucz DZIAŁA — pyta o hasło do klucza, nie do serwera. Samo połączenie SSH z kontem opisaliśmy szerzej w haśle SSH.
Skonfiguruj plik ~/.ssh/config i ssh-agent dla wygody
Plik ~/.ssh/config pozwala logować się na serwer krótkim aliasem zamiast pełnej komendy — zamiast ssh user@192.168.0.255 wpiszesz ssh mojserwer. Wystarczy dopisać do pliku config kilka linii:
- Host mojserwer
- HostName 192.168.0.255
- User user
- IdentityFile ~/.ssh/id_rsa
Pola oznaczają kolejno: Host to alias, którego użyjesz w komendzie, HostName to adres IP lub nazwa serwera, User to nazwa użytkownika, a IdentityFile to ścieżka do klucza prywatnego. Od tej chwili logujesz się komendą ssh mojserwer.
Drugie udogodnienie to ssh-agent — narzędzie przechowujące hasło do klucza prywatnego w pamięci, żebyś nie wpisywał passphrase przy każdym logowaniu. Uruchom je i dodaj klucz dwiema komendami:
- eval "$(ssh-agent -s)" — startuje agenta w bieżącej sesji terminala.
- ssh-add ~/.ssh/id_rsa — dodaje klucz prywatny do agenta (podasz passphrase raz).
Od tego momentu ssh-agent podaje hasło do klucza za Ciebie aż do zamknięcia sesji. Jeśli konfigurujesz też dostęp z Windowsa, zobacz, jak dodać klucz SSH przy pomocy PuTTy w Windows. Potrzebujesz pomocy przy konfiguracji serwera? Nodea oferuje usługę administracji Linux — zajmiemy się SSH, zaporą i całą konfiguracją za Ciebie.
Jak włączyć SSH w Linux?
Zainstaluj pakiet openssh-server, a następnie uruchom usługę: na Ubuntu i Debianie poleceniem sudo systemctl start ssh, na CentOS i RHEL sudo systemctl start sshd. To startuje demona SSH po stronie serwera i dopiero wtedy możesz logować się kluczem.
Jakie są podstawowe komendy SSH w systemie Linux?
Najważniejsze to: ssh-keygen (generowanie klucza), ssh-copy-id (kopiowanie klucza na serwer) i ssh (łączenie z serwerem). Do tego ssh-add dodaje klucz prywatny do ssh-agent, żeby nie wpisywać hasła za każdym razem.
Jak połączyć się za pomocą SSH?
Wpisz w terminalu ssh user@adres_ip_serwera, podstawiając nazwę użytkownika i adres serwera. Jeśli masz dodany klucz publiczny w authorized_keys, zalogujesz się bez podawania hasła do serwera.
Jaki jest klucz publiczny SSH i gdzie go znaleźć?
Klucz publiczny SSH to plik id_rsa.pub w katalogu ~/.ssh, który możesz udostępniać i umieszczać na serwerach. Podejrzysz jego zawartość poleceniem cat ~/.ssh/id_rsa.pub.
Czy jeden klucz SSH może działać na wielu serwerach?
Tak, tę samą parę kluczy SSH dodasz na wiele serwerów. Wystarczy skopiować ten sam klucz publiczny do pliku authorized_keys na każdym z nich — klucz prywatny cały czas zostaje na Twoim komputerze.
Co zrobić, gdy zgubię klucz prywatny SSH?
Wygeneruj nową parę kluczy i dodaj nowy klucz publiczny na serwer, a stary wpis usuń z authorized_keys. Klucza prywatnego nie da się odzyskać ani odtworzyć z publicznego — trzeba utworzyć nowy.
