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

  1. Połączenie z pominięciem wpisów w pliku knownhosts
ssh -o UserKnownHostsFile=/dev/null user@ip 
  1. 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.openssh.com/

https://www.youtube.com/watch?v=PjDFk8xdtGw

https://www.youtube.com/watch?v=vINn1MIrf7o

https://www.linode.com/docs/guides/using-ssh-agent/

Obrazek(-ki):

Markus Spiske, @Unsplash