SSH na codzień
Korzystając z zewnętrznych serwerów, serwisów takich jak np. Github itd. ciężko uniknąć tematu SSH. To protokół umożliwiający zalogowanie się i połączenie ze zdalnym urządzeniem. Połączenie takie jest zabezpieczane nawet gdy przechodzi przez niezabezpieczoną sieć - co w połączeniu z prostotą podstawowej obsługi wpływa na popularność tego rozwiązania.
Jak się połączyć?
Bazowa składnia wygląda następująco:
ssh nazwa_uzytkownika@nazwa_host(lub_ip)
W większości wypadków na tym etapie można poprzestać. Po nawiązaniu połączenia pojawi się prośba o podania hasła i tyle.
Przy pierwszym połączeniu padnie jeszcze pytanie czy na pewno chcemy się z tym hostem łączyć. Jeśli odpowiedź będzie twierdząca zostanie on dodany do pliku known_hosts znajdującego się w ukrytym folderze .ssh w katalogu domowym użytkownika (dot. to Linuxa / MacOS-a).
Klucze SSH
Wpisywanie hasła nie należy do najprzyjemniejszych opcji. SSH umożliwia znacznie przyjemniejszy i bezpieczniejszy wariant - klucze asynchroniczne. Publiczny wgrywamy na sprzęt docelowy (możemy też się nim dzielić), z kolei prywatny trzymamy zabezpieczony.
W przypadku SSH zamysł jest taki, że generujemy taki klucz per urządzenie z którego korzystamy i część publiczną wgrywamy na wszystkie serwery z którymi chcemy się połączyć. Przy takiej konfiguracji będzie najmniej zgrzytów podczas pracy.
Parę kluczy można stworzyć np. tak:
ssh-keygen -t ed25519
Podczas tego procesu ustawia się jeszcze miejsce zapisu (domyślnie ~/.ssh) / nazwę i ewentualnie hasło (jako zabezpieczenie klucza). Plik z rozszerzeniem .pub
to oczywiście klucz publiczny, który wgrywamy na urządzenie w którym chcemy się uwierzytelnić.
Wgrywanie kluczy
Możemy to zrobić “ręcznie”. W tym wariancie trzeba się zalogować na urządzeniu docelowym (np. poprzez ssh z wykorzystaniem hasła). Następnie zawartość pliku pub
(można ją podejrzeć i następnie skopiować np. otwierając go w jakimś edytorze tekstowym lub cat nazwapliku.pub
) trzeba dopisać jako kolejną linijkę w pliku ~/.ssh/authorized_keys
np.
echo zawartosc_pliku_pub >> ~/.ssh/authorized_keys
Znacznie wygodniejszą opcją jest skorzystanie z polecenia:
ssh-copy-id username@remote_host -i ścieżka_do_klucza
Specyficzne przypadki
- Połączenie z pominięciem wpisów w pliku
knownhosts
ssh -o UserKnownHostsFile=/dev/null user@ip
- Połączenie bez wykorzystania kluczy
ssh -o PubkeyAuthentication=no user@ip
Można te warianty łączyć. Te opcje przydają się np. wtedy gdy restartujemy serwer i uruchamiamy go w trybie awaryjnym, w którym “odcisk” systemu będzie się różnił od tego przechowywanego w pliku known_hosts
.
Przechowywanie ustawień
Chcąc zachować jakąś konfigurację na dłużej (np. żeby jakiś specyficzny, dodatkowy klucz był zawsze wykorzystywany do połączenia z serwerem) można stworzyć plik ~/.ssh/config
i dodać wpis np.
Host nazwa
HostName adres_url
PubkeyAuthentication yes
IdentityFile ścieżka_do_klucza
Źródła
https://linuxize.com/post/using-the-ssh-config-file/
https://www.redswitches.com/blog/use-the-ssh-config-file-for-openssh-users/
https://www.ssh.com/academy/ssh/config
https://www.youtube.com/watch?v=PjDFk8xdtGw