Skonfiguruj dostęp SSH w kilku prostych krokach

Dostęp SSH w systemach operacyjnych z rodziny Linux jest operacją bardzo typową. szybko Jak ułatwić sobie życie w komunikacji SSH pomiędzy maszyną kliencką a serwerem?

1. Loguj się bez hasła przy użyciu certyfikatu

Do tego celu służy sekwencja poleceń:
ssh-keygen
ssh-copy-id
ssh-add

w razie błędu „Too many authentication failures” warto użyć opcji:
-o 'PubkeyAuthentication=no'
lub
-o 'IdentitiesOnly=yes'

Wygodny szablon jednolinijkowca:
dane="login@serwer.tld"; plik=nazwa_wewnetrzna; ssh-keygen -f ~/.ssh/id_rsa_$plik -N ''; ssh-copy-id -i ~/.ssh/id_rsa_$plik -o 'IdentitiesOnly yes' $dane; ssh-add ~/.ssh/id_rsa_$plik
oczywiście zamiast serwer.tld można użyć bezpośrednio adresu IP.

Logowanie można wykonać poprzez użycie klucza prywatnego
ssh -i ~/certyfikat.pem login@1.2.3.4
lub prościej, w razie użycia magazynu certyfikatów (patrz niżej):
ssh login@1.2.3.4

Konfiguracja magazynu znajduje się w pliku ~/.ssh/config i przybiera następującą formę:
Host server1 server1.company.com
Hostname 1.2.3.4
User login
IdentityFile /ścieżka/certyfikat.pem

2. Wyłącz logowanie przy użyciu hasła

W tym celu należy edytować plik /etc/ssh/sshd_config na serwerze, dopisujemy tam:
PasswordAuthentication no
oraz w linii poleceń restartujemy usługę
sudo service ssh restart

3. Nie wymagaj hasła dla polecenia sudo

Dla osiągnięcia takiego efektu w pliku /etc/sudoers dodajemy
nazwa_konta_uzytkownika ALL=NOPASSWD: ALL

4. Ogranicz logowanie przez SSH

W tym celu edytujemy plik /etc/ssh/sshd_config i używamy następujących parametrów
LoginGraceTime {czas na wykonanie logowania w sekundach, np. 60}
PermitRootLogin no
MaxAuthTries {maksymalna liczba prób logowania, np. 5}
AllowUsers nazwa_konta_uzytkownika

5. Wydłuż czas utrzymania sesji SSH

Szczególnie przydatna opcja w razie częstego rozłączania się połączenia z serwerem.
Edytujemy plik /etc/ssh/sshd_config
ClientAliveInterval {liczba sekund, np. 120}
ClientAliveCountMax {liczba powtórzeń, np. 15}

Powyższa konfiguracja utrzyma sesję SSH przez 120 sekund * 15, czyli przez 30 minut.

W celu zastosowania zmian wykonujemy:
sudo /etc/init.d/ssh restart (w systemach z rodziny Debian)
sudo systemctl restart sshd (w systemie CentOS)

Warto dodać, iż system operacyjny macOS również umożliwia wykonywanie powyższych poleceń po stronie klienta łączącego się z serwerem.