SSH z 2FA – dodatkowa warstwa bezpieczeństwa dla serwerów Linux

Uwierzytelnianie kluczami SSH to już całkiem solidne zabezpieczenie, ale można pójść jeszcze krok dalej. Szczególnie jeśli pracujesz na serwerach produkcyjnych albo systemach, gdzie każdy wyciek to potencjalny dramat. Dobrym rozwiązaniem jest dorzucenie dwuskładnikowego logowania (2FA) do SSH – wdrożenie jest szybkie, a poziom bezpieczeństwa rośnie naprawdę zauważalnie.

Po co w ogóle 2FA w SSH?

  • Ochrona przed kradzieżą klucza – nawet jeśli ktoś zdobędzie Twój klucz prywatny, nie zaloguje się bez drugiego składnika.

  • Ochrona przed brute force– hasła są kiepskie, klucze czasem źle zabezpieczone. 2FA dorzuca dodatkową przeszkodę.

  • Prosta konfiguracja – wystarczy kilka minut dzięki PAM i Google Authenticator.

Jak dorzucić 2FA do logowania przez SSH?

1. Instalacja pakietu
Na Debianie/Ubuntu:

apt install libpam-google-authenticator

Na CentOS/RHEL pakiet może się nazywać google-authenticator.

2. Konfiguracja użytkownika
Dla każdego konta wykonaj polecenie:

google-authenticator

Wygenerowany zostanie klucz, kod QR (do zeskanowania np. w Google Authenticator, Authy, Aegis) i kody zapasowe.

3. PAM
Edytuj /etc/pam.d/sshd i dopisz na końcu:

auth required pam_google_authenticator.so nullok

* Warto wiedzieć: nullok oznacza, że użytkownik, który nie ma skonfigurowanego 2FA (czyli pliku ~/.google_authenticator), dalej może się zalogować bez podawania kodu. To bywa przydatne w testach albo w środowiskach mieszanych (gdzie część użytkowników ma 2FA, a część jeszcze nie). W produkcji raczej odradza się używanie nullok, bo osłabia zabezpieczenie – wystarczy, że ktoś usunie plik .google_authenticator ze swojego katalogu domowego i loguje się z pominięciem 2FA.

4. SSHD config
W /etc/ssh/sshd_config ustaw:

KbdInteractiveAuthentication yes

5. Kolejność uwierzytelniania
Dodaj następującą linię do /etc/ssh/sshd_config:

AuthenticationMethods publickey,keyboard-interactive

Dzięki temu logowanie wymaga klucza + hasła + kodu, a nie tylko jednego z nich.

6. Restart usługi

systemctl restart sshd

UWAGA

  • Testuj ostrożnie – zawsze zostaw otwartą starą sesję, zanim zamkniesz, żeby nie odciąć się od serwera.

  • Kody zapasowe – schowaj je w bezpiecznym miejscu, na wypadek zgubienia telefonu.

  • Alternatywy – zamiast Google Authenticatora możesz używać TOTP w KeePassXC, Yubikey albo innym menedżerze haseł.

  • Większe środowiska – przy dużej liczbie użytkowników lepiej sprawdza się integracja np. z FreeIPA albo Keycloak.