Protokół SSH umożliwia uzyskanie sesji tekstowej lub graficznej na dowolnym komputerze z zainstalowanym
serwerem SSH. Na naszym Wydziale można zdalnie korzystać z serwerów duch
oraz students
, a także z komputerów w Laboratorium Komputerowym (pod systemem
Linux).
Logowanie przy użyciu hasła
Jest to najprostsza metoda logowania, zachęcamy jednak do niewiele bardziej skomplikowanej, a dużo bezpieczniejszej metody kluczy SSH;
do uwierzytelnienia pierwszym sposobem wymagana jest znajomość swojego hasła centralnego oraz nazwy serwera lub komputera,
na który chcemy się zalogować. Na komputerze użytkownika powinien być zainstalowany program kliencki SSH, np. openssh-client
pod Linuksem, Windows od wersji Windows 10 (kompilacja 1809) posiada wbudowanego klienta SSH, a w przypadku starszej wersji Windowsa 10 bądź starszej wersji Windowsa można posłużyć się dowolnym graficznym klientem SSH np. putty
.
Zalogować się możemy korzystając z terminala dołączonego domyślnie do naszego środowiska graficznego (w przypadku Linuksa) bądź korzystając z Windows Terminala który jest integralną częścią Windows 11 (można go również zainstalować na starszych wersjach Windowsa).
Przykładowe logowanie w systemie Linux i Windows wygląda następująco:
# ssh login@duch.mimuw.edu.pl
The authenticity of host 'duch.mimuw.edu.pl (10.0.0.3)' can't be established.
ECDSA key fingerprint is SHA256:aGmqrq9HinndODxFNTFoum5/orDBuCCwpSAnTYJN3W4.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'duch.mimuw.edu.pl' (ECDSA) to the list of known hosts.
Należy zaakceptować klucz publiczny serwera (standardowa procedura) oraz podać hasło.
Logowanie za pomocą kluczy SSH
Ta metoda wykorzystuje parę kluczy SSH, jeden publiczny, który, jak wskazuje nazwa może zostać udostępniony otoczeniu, np. w Internecie w serwisie Github lub podobnym, oraz prywatny, który musimy za wszelką cenę chronić i nie udostępniać nigdy, nikomu. Obydwa klucze połączone są kryptograficznie i będą działać wyłącznie w parze; nie jest możliwe (tzn. nie jest obecnie możliwe przy użyciu obecnych technologii bądź nieopłacalne poprzez zbyt duży nakładów środków) uzyskanie w rozsądnym czasie klucza prywatnego, posiadając jedynie klucz publiczny.
~/.ssh
.
Generowanie kluczy SSH
Klucze SSH to nic innego jak pliki tekstowe zawierające unikalny ciąg znaków, stanowiący nasz klucz, oraz ew. dodatkowe parametry.
Do wygenerowania pary kluczy SSH służy program ssh-keygen
. Parę kluczy można uzyskać stosując różnego rodzaju
algorytmy kryptograficzne; obecnie, coraz częściej spotykanym i zalecanym jest stosowanie algorytmów krzywych eliptycznych.
Aby bezpiecznie korzystać z kluczy SSH użytkownik nie musi wiedzieć zupełnie nic o tym, jak działa dany algorytm. Podczas generowania
kluczy zostaniemy zapytani o dwie ważne rzeczy:
+ ścieżkę do pliku klucza: standardowo, będzie to katalog .ssh
w katalogu domowym użytkownika;
ważne, aby nazwy kluczy nie kolidowały, gdyż możemy ich mieć kilka.
+ hasło do klucza: jest to najważniejszy parametr. W większości standardowych zastosowań należy
ustawić silne hasło klucza. W wypadku np. kradzieży dysku lub notebooka, jeżeli trzymaliśmy dane niezaszyfrowane,
hasło do klucza nie pozwoli nikomu uzyskać dostępu do miejsc zabezpieczonych kluczem i przez to wyrządzić więcej szkód.
# ssh-keygen -t ed25519 -C "komentarz_do_klucza"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/kmwil/.ssh/id_ed25519): test
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in test
Your public key has been saved in test.pub
The key fingerprint is:
SHA256:cTKSTiSB5OWS4hgR1wyEOwRdJBmUgy5FO1QAylvWkjE komentarz_do_klucza
The key's randomart image is:
+--[ED25519 256]--+
|*@%EB.. |
|=*B*Bo . |
|*+*...+ + . |
|*++o.o . = |
|o+ . S |
| |
| |
| |
| |
+----[SHA256]-----+
W wyniku działania polecenia wygenerowane zostaną dwa pliki, w tym przypadku nasz tajny plik klucza prywatnego test
oraz część publiczna,
test.pub
. Klucz prywatny powinien zostać umieszczony w katalogu domowym w podkatalogu ~/.ssh
oraz mieć nadane odpowiednie uprawnienia
(tak, jak katalog kluczy):
+ ~/.ssh
powinien mieć uprawnienia 700
.
+ ~/.ssh/test
klucz prywatny powinien mieć uprawnienia 600
.
Transfer kluczy SSH
Aby móc zalogować się za pomocą klucza SSH, jego publiczna część musi znaleźć się na docelowej maszynie lub w docelowym serwisie (np. Gitlab). Wtedy, przy użyciu unikalnej,
tajnej, prywatnej części klucza będącej tylko i wyłącznie w naszym posiadaniu możemy uwierzytelnić się w żądanym miejscu. Do transferu klucza publicznego służy polecenie
ssh-copy-id
. Przykładowo, jeżeli chcemy umieścić klucz publiczny na serwerze students
, powinniśmy wykonać
następujące polecenie i postępować zgodnie z instrukcją wyświetlaną na ekranie. Każde kolejne logowanie powinno odbyć się już za pomocą klucza SSH.
# ssh-copy-id -i ~/.ssh/test.pub login_ze_students@students.mimuw.edu.pl
Zarządzanie wieloma kluczami SSH
Posiadanie wielu kluczy do różnych zastosowań jest dobrą praktyką, może natomiast przysporzyć nieco kłopotów. Często spotykanym problemem
jest odmowa uwierzytelnienia na serwerze, na którym mamy poprawny publiczny klucz SSH. Komunikat, który możemy zobaczyć w takim przypadku to
To many authentication falitures
. Wynika to z faktu, iż podczas logowania nasz system próbuje się uwierzytelnić
każdym z posiadanych kluczy, próbując każdego po kolei; po n-tej nieudanej próbie serwer odmówi współpracy.
Jednym z rozwiązań jest wskazanie podczas logowania, którego klucza należy użyć. Służy do tego flaga -i
.
# ssh -i ~/.ssh/test login_ze_students@students.mimuw.edu.pl
Innym sposobem jest utworzenie pliku ~/.ssh/config
. Możemy w nim zdefiniować każdy komputer lub serwer,
do którego się łączymy, wskazując nazwę użytkownika, plik klucza SSH do wykorzystania, niestandardowe numery portów i wiele innych
(patrz man ssh_config
). Przykładowa, podstawowa konfiguracja dla serwera studenckiego jest następująca.
Host students
Hostname students.mimuw.edu.pl
User kmwil
AddressFamily inet
IdentityFile ~/.ssh/id_ed25519
Agent SSH
Aby uniknąć ciągłego wpisywania hasła odblokowującego klucz prywatny, można skorzystać z agenta SSH, czyli programu bezpiecznie przechowującego odblokowane klucze do czasu wyłączenia komputera, wylogowania lub upłynięcia czasu takiego schowka. W większości systemów z graficznym interfejsem agent jest uruchamiany wraz ze środowiskiem, na serwerach należy taki program uruchomić. W terminalu należy wydać następujące polecenie:
# eval "$(ssh-agent -s)"
Dodawanie kluczy do agenta SSH
Dodanie klucza prywatnego wymaga wywołania programu ssh-add
, wskazania pliku klucza oraz podania hasła odblokowującego.
Po tej czynności klucz zostanie umieszczony w agencie i będzie wykorzystywany bez konieczności podawania hasła.
# ssh-add ~/.ssh/id_ed25519