Tutoriel Linux

Klucz SSH w systemie Ubuntu: wygeneruj go poprawnie przed wyłączeniem haseł

Débutant4 min de lecture

Jeśli administrujesz serwerem Ubuntu przez SSH, klucz publiczny musi być gotowy, zanim przejdziesz do uwierzytelniania hasłem. To jest punkt, który zbyt często widzę odwrócony: wzmacniamy sshdPonownie uruchamiamy usługę i okazuje się, że klucz nigdy nie został właściwie przetestowany.

W tym przewodniku zaczynamy od klucza ed25519Instalujemy klucz publiczny na serwerze, otwieramy drugą sesję, aby go przetestować, i dopiero wtedy wyłączamy hasła. Nie zajmuje to dużo czasu i zapobiega zablokowaniu dostępu.

Tux trzyma klucz SSH przed bezpiecznym serwerem Ubuntu
Przed wyłączeniem uwierzytelniania hasłem należy wygenerować, skopiować i przetestować klucz SSH.

Utwórz klucz SSH ed25519 na swoim komputerze

Na komputerze lokalnym wygeneruj klucz ed25519. To format, który wybrałbym dzisiaj do typowej administracji SSH.

ssh-keygen -t ed25519 -a 100 -C "admin@post"

Polecenie pyta, gdzie zapisać klucz. Jeśli nie masz jeszcze dedykowanego klucza, możesz zachować sugerowaną ścieżkę:

~/.ssh/id_ed25519

Dodaj hasło. Na laptopie lub komputerze, który opuszcza biuro, nie zostawiałbym klucza prywatnego bez ochrony. Hasło chroni klucz w przypadku skopiowania pliku lub włamania do komputera.

Następnie sprawdź, czy oba pliki istnieją:

ls -l ~/.ssh/id_ed25519 ~/.ssh/id_ed25519.pub

Plik bez rozszerzenia .pub to klucz prywatny. Nie wolno go wysyłać na serwer, kopiować do zgłoszenia ani udostępniać. Plik .pub jest kluczem publicznym, tym, który zainstalujesz w Ubuntu.

Zainstaluj klucz publiczny w systemie Ubuntu

Jeśli nadal masz dostęp do hasła, najprostszą metodą jest ssh-copy-id :

ssh-copy-id -i ~/.ssh/id_ed25519.pub użytkownik@serwer

Zastępować użytkownik poprzez docelowe konto SSH i serwer według adresu IP lub nazwy IN. Polecenie dodaje Twój klucz publiczny w ~/.ssh/authorized_keys po stronie serwera.

Jeśli ssh-copy-id nie jest dostępny, możesz to zrobić ręcznie z istniejącej sesji SSH:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

Wklej pojedynczą linię: całą zawartość pliku id_ed25519.pubNigdy nie wklejaj klucza prywatnego. Jeśli nie masz pewności, plik publiczny zazwyczaj zaczyna się od ssh-ed25519.

Przetestuj w drugiej sesji przed zamknięciem starej.

Nie zamykaj bieżącej sesji SSH. Otwórz drugi terminal i przetestuj połączenie za pomocą klucza:

ssh -i ~/.ssh/id_ed25519 użytkownik@serwer

Jeśli uzyskasz dostęp do serwera bez hasła do konta, klucz będzie działał. Jeśli połączenie nadal prosi o hasło użytkownika, najpierw sprawdź uprawnienia:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
ls -ld ~/.ssh
ls -l ~/.ssh/authorized_keys

W systemie Ubuntu sprawdź także logi SSH, jeśli klucz zostanie odrzucony:

sudo journalctl -u ssh -n 80 --no-pager

Nieprawidłowy właściciel folderu, klucz wklejony w kilku wierszach lub inne konto docelowe – to wszystko może zablokować uwierzytelnianie. Nie modyfikuj konfiguracji SSH, dopóki ten krok nie zostanie ukończony.

Przygotuj sshd przed wyłączeniem haseł

Przed zmianą konfiguracji należy wykonać kopię zapasową pliku głównego:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

Następnie sprawdź, czy znajdują się tam jakieś pliki /etc/ssh/sshd_config.d/ zdefiniuj już uwierzytelnianie za pomocą klucza lub hasła:

sudo grep -R "^PubkeyAuthentication|^PasswordAuthentication" /etc/ssh/sshd_config /etc/ssh/sshd_config.d/*.conf 2>/dev/null

W Ubuntu wolę utworzyć dedykowany plik niż modyfikować dziesięć wierszy w środku głównego pliku:

sudo nano /etc/ssh/sshd_config.d/99-disable-password.conf

Dodać:

Tak, uwierzytelnianie klucza publicznego
Hasło Nr uwierzytelnienia

Przed ponownym załadowaniem SSH przetestuj składnię. Nie podlega to negocjacjom na serwerze zdalnym.

sudo /usr/sbin/sshd -t

Jeśli polecenie nic nie zwróci, składnia jest prawidłowa. Jeśli wyświetli błąd, popraw go przed ponownym załadowaniem.

Przeładuj SSH bez odcinania dostępu

Po sprawdzeniu składni należy ponownie załadować usługę:

sudo systemctl przeładuj ssh
sudo systemctl status ssh --no-pager

Pozostaw pierwszą sesję otwartą. W drugim terminalu przetestuj ponownie połączenie oparte na kluczu:

ssh -i ~/.ssh/id_ed25519 użytkownik@serwer

Sprawdź również, czy połączenie bezkluczowe nie powiedzie się, jeśli masz konto testowe lub komputer, na którym klucz nie jest załadowany. Celem jest weryfikacja rzeczywistości, a nie tylko odczytanie wiersza konfiguracji.

Jeśli używasz protokołu SSH w systemie Ubuntu, miej ten przewodnik pod ręką. ponowne uruchamianie SSH w UbuntuJeśli masz lokalną zaporę sieciową, sprawdź również swoje zasady w artykule na ten temat UFW przed otwarciem serwera.

Kontrole zapobiegające blokadzie

  • klucz prywatny pozostaje wyłącznie na Twoim komputerze;
  • klucz publiczny rzeczywiście jest w ~/.ssh/authorized_keys właściwy użytkownik;
  • prawa są poprawne ~/.ssh I autoryzowane_klucze ;
  • druga sesja SSH na każdy klucz działa bez żadnych przerw;
  • sudo /usr/sbin/sshd -t nie zwraca żadnego błędu;
  • Zapora nadal zezwala na prawidłowy port SSH.

Jeśli utracisz dostęp SSH po zmianie, będziesz musiał skorzystać z konsoli odzyskiwania, KVM, dostępu do dostawcy chmury lub trybu ratunkowego. Ta metoda ma na celu zapobiegnięcie temu. Aby uzyskać bardziej kompleksową naprawę, zapoznaj się z poradnikiem. czysta ponowna instalacja SSH na Ubuntu.

Oficjalną dokumentację można znaleźć na stronie Ubuntu Serwer OpenSSHServerStrony referencyjne ssh-keygen I ssh-copy-id Szczegółowo opisują także zastosowane tutaj opcje.