Jak używać SSH i kluczy SSH
dnkr
2015-04-09
TIP

Jeżeli utkniesz w dowolnym momencie tego poradnika, skopiuj treść swoich błędów do dowolnego czatu AI, a on pomoże Ci pójść dalej.

O co chodzi z SSH i do czego ono służy#

Żeby się połączyć do swojego serwera masz dwie opcje: albo podłączasz do niego klawiaturę i monitor - co jest niewygodne, a często niemożliwe, albo ze swojego komputera łączysz się poprzez SSH. SSH to protokół komunikacji umożliwiający Ci bezpieczne połączenie się do zdalnego serwera.

Jak używać SSH#

Niezależnie czy jesteś na Linuxie czy Windowsie 10+, otwórz terminal/cmd/wiersz poleceń i użyj polecenia ssh

W miejsce user wpisz nazwę użytkownika, zazwyczaj to będzie root, user, ubuntu lub debian. W miejsce serwer wpisz adres IP lub podaj domenę twojego serwera. @ to wskaźnik do jakiego serwera się łączymy. Tak jak w poczcie email, to co przed małpą to twoja nazwa użytkownika, to co po małpie to serwer.

ssh user@serwer

na przykład:

ssh [email protected]

Jeżeli do swojego serwera otrzymałeś niestandardowy port, podaj go w parametrze p

ssh -p44111 user@serwer

Jeżeli twój serwer ma tylko adres IPv6, dodaj parametr 6, lecz jest on opcjonalny - SSH samo powinno wykryć adres IPv6.

ssh -6 user@128d:b43a:a578:e371:de6f:1078:2306:0ffc

Jeżeli podałeś dobrą nazwę użytkownika, adres IP, a serwer akceptuje ruch przychodzący, zobaczysz taką odpowiedź. To oznacza, że serwer prosi Cię o hasło. Jeżeli wynajmujesz serwer, to hasło dostałeś na maila lub jest widoczne w panelu.

TIP

Wpisujesz hasło na Linuxie, ale nic się nie pokazuje? To normalne, że nic się nie pojawia w konsoli - na Linuxie nie ma wizualnej reprezentacji tego, że wpisujesz hasło, dlatego na “ślepo” wpisz hasło i potwierdź je enterem.

[email protected]'s password:

Po wpisaniu poprawnego hasła zobaczysz tekst podobny do tego - oznacza to, że poprawnie połączyłeś się do serwera po SSH, a wszystkie polecenia, które teraz wydasz, będą mieć skutek na serwerze, a nie twoim komputerze.

ssh [email protected]
[email protected]'s password: 
Linux debian-amd64 

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

root@debian ~ # 

Aby się rozłączyć, możesz zamknąć terminal, na klawiaturze kliknąć skrót CTRL + D lub wpisać polecenie exit

exit

Czym są klucze SSH#

Klucze SSH to kryptograficzna para kluczy (prywatny i publiczny), które służą do uwierzytelniania się przy połączeniach zdalnych, głównie z serwerami, bez konieczności wpisywania hasła. Zaleca się korzystać z kluczy SSH, a nie haseł, natomiast warto w razie różnych sytuacji mieć zapisane hasło do swojego użytkownika na serwerze.

Klucz prywatny, jak sama nazwa wskazuje jest supertajny i nie może do niego dostępu mieć nikt poza tobą, oraz klucz publiczny, który znać może każdy. Klucz prywatny zostaje na twoim komputerze, klucz publiczny trafia na serwer, z którym chcesz się łączyć bez użycia hasła.


Jak używać kluczy SSH. Jak logować się do serwera bez hasła#

Najpierw musisz wygenerować sobie parę kluczy SSH. Użyj polecenia ssh-keygen, w parametrze t podajemy algorytm ed25519, a w parametrze c komentarz do klucza - przyjęło się, że standardowo podaje się tam adres email, ale możesz tam wpisać swój nick albo imię.

ssh-keygen -t ed25519 -C "[email protected]"

W tym momencie zostaniesz poproszony o podanie lokalizacji, w której mają zostać stworzone klucze SSH. Najlepiej wybrać domyślną lokalizację w twoim katalogu domowym, czyli ~/.ssh/, więc kliknij tylko enter nie wpisując nic.

dnkr@pc ~ $ ssh-keygen -t ed25519 -C "[email protected]"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/dnkr/.ssh/id_ed25519):

Następnie zostaniesz poproszony o podanie hasła (a potem o powtórzenie hasła), którym zostanie zabezpieczony twój klucz prywatny. Oznacza to tyle, że w momencie gdy ktoś wejdzie w posiadanie twojego klucza prywatnego, będzie najpierw musiał odgadnąć hasło. (Nie będziesz za każdym razem wpisywać tego hasła, klient SSH je zapamięta). Możesz też przejść dalej nie podając hasła (brak hasła zatwierdzasz klikając enter), ale nie zaleca się tego.

Gdy wszystko się powiedzie, zobaczysz komunikat z informacją o lokalizacji, gdzie zostały zapisane twoje klucze SSH. Twój klucz prywatny to plik id_ed25519, a publiczny klucz to id_ed25519.pub.

Your identification has been saved in /home/dnkr/.ssh/id_ed25519
Your public key has been saved in /home/dnkr/.ssh/id_ed25519.pub

Zawartość obu kluczy możesz podejrzeć poleceniem cat:

cat ~/.ssh/id_ed25519
cat ~/.ssh/id_ed25519.pub

Przesyłanie klucza publicznego na serwer zdalny#

Żeby serwer mógł Cię uwierzytelnić przy użyciu twojego klucza prywatnego, najpierw musisz wysłać swój klucz publiczny na serwer.

ssh-agent to proces w tle, który przechowuje Twoje klucze w pamięci, by nie trzeba było wpisywać hasła ani wskazywać lokalizacji klucza przy każdej sesji SSH. Aby uruchomić agenta i dodać klucz, wykonaj te polecenia:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

Teraz wyślemy klucz publiczny na twój serwer poleceniem ssh-copy-id. Jeżeli posiadasz niestandardowy port SSH, użyj parametru p.

ssh-copy-id user@serwer

Możesz zostać poproszony o potwierdzenie nawiązania połączenia takim komunikatem:

Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

Żeby potwierdzić, klikasz enter, następnie zostaniesz poproszony o podanie hasła do serwera. Gdy klucz publiczny zostanie pomyślnie dodany do serwera, zobaczysz komunikat:

Number of key(s) added: 1

Manualne przesyłanie klucza publicznego na serwer zdalny#

Ten krok możesz pominąć, jeżeli udało Ci się przesłać klucz publiczny poleceniem ssh-copy-id. Jeżeli Ci się nie udało, możesz ten proces wykonać manualnie tymi poleceniami:

ssh user@serwer #połącz się z serwerem
mkdir ~/.ssh #stwórz katalog .ssh jeżeli taki nie istnieje
cd ~/.ssh #wejdź do tego katalogu
touch authorized_keys #stwórz plik authorized_keys
#do pliku authorized_keys wklej klucz publiczny (`id_ed25519.pub`), zapisz i zamknij
chmod 700 ~/.ssh #nadaj poprawne uprawnienia 
chmod 600 ~/.ssh/authorized_keys #nadaj poprawne uprawnienia

Konfiguracja serwera, aby akceptował logowanie kluczami SSH#

Upewnij się, że plik /etc/ssh/sshd_config zawiera następujące ustawienia (znak # oznacza, że dana linijka jest zakomentowana, czyli dana dyrektywa jest wyłączona i nie działa). Edycja tego pliku jako zwykły user może nie być możliwa - skorzystaj z sudo lub usera root.

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes

Ustawieniem PasswordAuthentication yes pozwalamy nadal logować się hasłem, tak dla bezpieczeństwa, żebyś się nie odciął od serwera. Po zmianach uruchom ponownie serwer SSH poleceniem:

sudo systemctl restart ssh

Od teraz możesz bezpiecznie logować się na serwer bez podawania hasła przy użyciu kluczy SSH poleceniem:

ssh user@serwer

.ssh/config czyli jak sprawniej korzystać z SSH#

Plik config umożliwia tworzenie customowych połączeń, oznacza to, że możesz skonfigurować SSH, aby łączyć się do serwera np. minecraft poleceniem ssh mc, a nie ssh -p43821 [email protected]

Otwórz plik ~/.ssh/config i dodaj tam taką zawartość:

Host mc
    HostName fastfreemchosting.gov
    User user11
    Port 43821

W Host podajesz nazwę serwera, po której będziesz się łączyć - może to być cokolwiek, co zapamiętasz. W HostName adres IP lub domenę serwera, w Port podaj port SSH, jeżeli jest niestandardowy. Jeżeli to domyślne 22, to nie musisz tego podawać.

Zapisz plik, wyjdź z niego i przetestuj połączenie wpisując:

ssh mc

Alternatywni klienci SSH#

Klasyka to Putty, jest też MobaXterm, Termius, Kitty, mRemoteNG, Terminator. Na Androida polecam JuiceSSH.