Skonfiguruj bezpieczne logowanie bez hasła do zdalnego serwera Ubuntu za pomocą kluczy SSH
SSH to bezpieczny protokół sieciowy klient-serwer, który pomaga komputerowi klienckiemu łączyć się i komunikować ze zdalnym serwerem. Połączenie SSH zapewnia, że polecenia wpisywane w terminalu są przesyłane do zdalnego serwera za pośrednictwem zaszyfrowanego kanału.
Istnieją dwa rodzaje mechanizmów uwierzytelniania używanych do łączenia się ze zdalnym serwerem, uwierzytelnianie oparte na hasłach (podatne na ataki typu Brute-force) oraz uwierzytelnianie oparte na kluczach SSH (które jest bardzo bezpieczne).
W przypadku uwierzytelniania opartego na kluczu SSH na komputerze klienckim generowana jest para kluczy, nazywana kluczem publicznym i kluczem prywatnym. Kopia tego klucza publicznego jest udostępniana na serwerze zdalnym. Gdy klient wysyła żądanie połączenia do serwera, serwer generuje losowy ciąg i szyfruje go za pomocą klucza publicznego. Ten ciąg można odszyfrować tylko przy użyciu klucza prywatnego dostępnego na komputerze klienckim. Ta metoda zapewnia dostęp do serwera tylko klientom zawierającym klucz prywatny.
W tym przewodniku zobaczymy, jak skonfigurować klucze SSH na serwerze Ubuntu 20.04 LTS.
Sprawdź, czy masz na swoim komputerze istniejący klucz SSH
Aby sprawdzić, czy para kluczy SSH już istnieje na twoim komputerze, wpisz to polecenie w swoim terminalu.
ls -l ~/.ssh/id_*.pub
Jeśli powyższe polecenie powróci brak takiego pliku lub katalogu
lub nie znaleziono żadnego meczu
, oznacza to, że para kluczy SSH nie istnieje.
Jeśli masz istniejącą parę kluczy SSH, możesz użyć tej samej pary kluczy, aby uzyskać dostęp do dwóch serwerów zdalnych, lub możesz również utworzyć inną parę kluczy o innej nazwie. Przejdźmy do następnego kroku i zobaczmy, jak wygenerować klucze SSH dla obu przypadków.
Tworzenie kluczy SSH na komputerze klienckim
Aby wygenerować nową parę kluczy SSH na komputerze, wpisz polecenie, jak pokazano poniżej.
ssh-keygen
Domyślnie klucze SSH mają 2048 bitów. Dla większego bezpieczeństwa, jeśli chcesz generować klucze SSH z wyższymi bitami, użyj następującego polecenia.
ssh-keygen -b 4096
Jeśli polecenie zostanie wykonane pomyślnie, na ekranie pojawi się następujący komunikat.
generowanie pary kluczy publiczny/prywatny rsa. Wpisz plik, w którym chcesz zapisać klucz (/home/harshit/.ssh/id_rsa):
Teraz, jeśli nie masz na komputerze żadnej pary kluczy SSH, po prostu naciśnij Wchodzić
, ale jeśli masz istniejący klucz SSH, zapisz klucz pod inną nazwą pliku, jak pokazano poniżej.
Wpisz plik, w którym chcesz zapisać klucz (/home/twoja_nazwa/.ssh/id_rsa): /home/twoja_nazwa/.ssh/id_rsa_xxx
Zastąp XXX
na końcu nazwy pliku z odpowiednią nazwą, jak pokazano poniżej i naciśnij Wchodzić
.
Wpisz plik, w którym chcesz zapisać klucz (/home/twoja_nazwa/.ssh/id_rsa): /home/twoja_nazwa/.ssh/id_rsa_klient_1
Następny monit poprosi Cię o wprowadzenie hasła o dowolnej długości, zapewni to dwupoziomowe bezpieczeństwo urządzenia.
Wprowadź hasło (puste, jeśli nie ma hasła): Wprowadź ponownie to samo hasło:
Wpisanie tego hasła zapewni, że nawet jeśli dana osoba uzyska dostęp do twojego klucza prywatnego, nie będzie mogła uzyskać dostępu do twojego zdalnego serwera bez tego hasła.
Po zakończeniu całego procesu na ekranie pojawi się następujący komunikat.
Klucze SSH zostały wygenerowane w Twoim systemie. Teraz czas na skopiowanie klucza publicznego na zdalny serwer.
Kopiowanie klucza publicznego na zdalny serwer Ubuntu
Najłatwiejszą i najszybszą metodą skopiowania klucza publicznego na zdalny serwer jest użycie ssh-copy-id
pożytek. Ale jeśli to narzędzie nie jest dostępne na twoim komputerze z jakiegoś powodu, możesz również użyć innych metod przedstawionych w tej sekcji.
Korzystanie z narzędzia ssh-copy-id
ten ssh-copy-id
Narzędzie jest domyślnie dostępne na twoim komputerze Ubuntu, które kopiuje klucz publiczny z twojego urządzenia do odpowiedniego katalogu na twoim zdalnym komputerze Ubuntu.
Aby skopiować publiczny klucz ssh, po prostu wpisz polecenie w swoim terminalu, jak pokazano poniżej.
ssh-copy-id nazwa_użytkownika@nazwa hosta
Zastąp Nazwa Użytkownika
oraz nazwa hosta
w powyższym poleceniu z nazwą użytkownika i nazwą hosta twojego serwera.
Poniższy komunikat pojawi się na twoim terminalu, jeśli łączysz się z hostem po raz pierwszy, wpisz tak
i naciśnij Wchodzić
.
Nie można ustalić autentyczności hosta „172.105.XX.XX (172.105.XX.XX)”. Odcisk palca klucza ECDSA to xx:xx:xx:xx:77:fe:73:xx:xx:55:00:ad:d6:xx:xx:xx. Czy na pewno chcesz kontynuować połączenie (tak/nie)? tak
Teraz ssh-copy-id
narzędzie wyszuka plik o nazwie id_rsa.pub
który zawiera publiczny klucz SSH. Po zakończeniu procesu skanowania zostanie wyświetlony monit o wprowadzenie hasła do zdalnego serwera, jak pokazano poniżej. Wpisz hasło i naciśnij Wchodzić
.
/usr/bin/ssh-copy-id: INFO: próba zalogowania się przy użyciu nowych kluczy, aby odfiltrować wszystkie, które są już zainstalowane /usr/bin/ssh-copy-id: INFO: 1 klucz(y ) pozostają do zainstalowania - jeśli teraz pojawi się monit, należy zainstalować nowe klucze [email protected] hasło:
Po dodaniu klucza na terminalu pojawi się następujący komunikat jako dane wyjściowe.
Liczba dodanych kluczy: 1 Teraz spróbuj zalogować się do komputera za pomocą: „ssh '[email protected]'” i upewnij się, że dodano tylko żądany klucz.
Jeśli masz wiele kluczy SSH na komputerze klienckim, aby skopiować odpowiedni klucz publiczny na komputer zdalny, wpisz polecenie według wzoru pokazanego poniżej.
ssh-copy-id -i id_rsa_xxx.pub nazwa użytkownika@host
💡 Wskazówka
Nie zapomnij umieścić .pub na końcu nazwy pliku podczas pisania w terminalu.
Kopiowanie klucza publicznego metodą rurociągów
Wpisz następujące polecenie w terminalu, jeśli ssh-copy-id
narzędzie nie jest dostępne. To polecenie może wydawać się nieco dłuższe, ale działa poprawnie.
kot ~/.ssh/id_rsa.pub | ssh remote_username@server_ip_address "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
Zastępować zdalna nazwa_użytkownika
oraz adres IP serwera
z Twoją nazwą użytkownika i adresem IP.
Jeśli masz wiele kluczy SSH dostępnych na komputerze, wymień id_rsa.pub
z wybranym plikiem klucza publicznego SSH. Na przykład, id_rsa_client_1.pub
.
Po wyświetleniu monitu wpisz hasło użytkownika zdalnego i naciśnij Wchodzić
.
[email protected] hasło:
Po wpisaniu hasła, id_rsa.pub
plik zostanie skopiowany do autoryzowane_klucze
plik zdalnego serwera.
Ręczne kopiowanie klucza publicznego
Użyj tej metody, jeśli nie masz dostępu do zdalnego systemu poprzez uwierzytelnianie hasłem.
Otworzyć id_rsa.pub
plik za pomocą Kot
polecenie w terminalu. Możesz go również otworzyć z edytora tekstu, celem jest po prostu skopiowanie zawartości pliku.
kot ~/.ssh/id_rsa.pub
Zawartość pliku będzie wyglądać tak, jak pokazano poniżej.
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQComjFtuHvHQ67uf3RXg2wgK4EtxBvBvLCtlc4chG + nJ1cbuJjJ6G8az4xsRN1Q7hrV4dYR81Tk3gRApiMdGcMvInU3Vb7Wq3nh9GS4xnLRH1wvb149wogum2MycIES69Xh0cib + VvJyZ + dGO8zRNT64 + SvfiecRV0llnBGWDRqrIGtMHJkKz7VDKuSyzDit / Ck1NFXxC6Plw3cEMOhWHycm8bnSHSoVpr95ySxxnokX4 / 9iAlvOovxTpMpmDaDvuHKgHxcsOv9Q4sz // 6HY / 65 + qqmiuLyuIQXjDiiYTjHTx + VNi6S0iMLoN6XgDLp0MfG6kLvZ0Z + csqdvIDQfMuH twoja_nazwa @ your_PC
Teraz zaloguj się do zdalnego serwera i wklej skopiowaną zawartość za pomocą polecenia pokazanego poniżej. Zastąp nad_ciągiem
ze skopiowaną treścią.
echo above_string >> ~/.ssh/authorized_keys
Konfiguracja wielu kluczy SSH (opcjonalnie)
Ten krok jest przeznaczony dla osób, które mają skonfigurowanych wiele kluczy SSH na swoim komputerze klienckim. Pomiń tę sekcję, jeśli masz tylko jedną konfigurację klucza SSH.
Aby zarządzać wieloma kluczami SSH, utworzymy teraz konfiguracja
plik wewnątrz .ssh
katalogu za pomocą polecenia pokazanego poniżej.
cd ~/.ssh vim config
Rodzaj i
aby wejść w tryb poleceń i wpisać szczegóły wielu hostów, jak pokazano w poniższym przykładzie:
Host zdalnego serwera ubuntu Nazwa hosta 172.105.XX.XX Plik tożsamości użytkownika root ~/.ssh/id_rsa_client_1 Host zdalnego serwera Ubuntu Nazwa hosta 172.106.XX.XX Plik tożsamości użytkownika root ~/.ssh/id_rsa_client_2
Podobnie wpisz szczegóły innych serwerów zdalnych i ich klucze. Po zakończeniu procesu naciśnij wyjście
oraz :wq
zapisać i wyjść.
Teraz kolejne procesy są takie same w przypadku posiadania jednego lub wielu kluczy SSH na komputerze klienckim.
Zaloguj się do zdalnego serwera za pomocą kluczy SSH
Po zakończeniu procesu kopiowania klucza publicznego zaloguj się do zdalnego serwera, wpisując polecenie, jak pokazano poniżej.
ssh zdalna_nazwa_użytkownika@adres_ip_serwera
Jeśli podałeś hasło podczas generowania pary kluczy, zostaniesz poproszony o jego wprowadzenie. Nowa sesja zostanie otwarta po zakończeniu procesu uwierzytelniania.
Pomyślnie skonfigurowałeś uwierzytelnianie oparte na kluczach SSH na serwerze zdalnym. Ale uwierzytelnianie oparte na hasłach jest nadal aktywne na twoim serwerze, co oznacza, że twój zdalny serwer jest nadal podatny na ataki siłowe.
Więc teraz całkowicie wyłączymy mechanizm logowania oparty na hasłach z naszego zdalnego serwera.
Wyłącz mechanizm logowania oparty na hasłach
Przed wprowadzeniem jakichkolwiek zmian upewnij się, że użytkownik root lub dowolny użytkownik z włączoną obsługą sudo dla Twojego konta zdalnego ma dostęp do Twojego serwera za pomocą systemu uwierzytelniania opartego na kluczu SSH. Ten krok całkowicie zablokuje lub wyłączy logowanie oparte na hasłach, dlatego ważne jest, aby co najmniej jeden użytkownik z uprawnieniami roota miał dostęp do serwera za pomocą klucza SSH.
Zaloguj się do zdalnego serwera Ubuntu i wpisz polecenie pokazane poniżej.
sudo vim /etc/ssh/sshd_config
- naciskać
wyjście
,/
i wpisz „PasswordAuthentication” i naciśnijWchodzić
. - Teraz naciśnij
i
i zmień wartość „PasswordAuthentication yes” na „PasswordAuthentication no”. - naciskać
wyjście
i powtórz powyższy proces, aby znaleźć „ChallengeResponseAuthentication”, „UsePAM” i zmień ich wartości nanie
także.
Hasło Uwierzytelnianie nie WyzwanieOdpowiedź Uwierzytelnianie nie UżyjPAM nie
Gdy wszystkie wartości zostaną ustawione na nie
, naciskać wyjście
, rodzaj :wq
i uderzył Wchodzić
.
Aby aktywować wszystkie zmiany, uruchom ponownie cisza
usługę za pomocą poniższego polecenia.
sudo systemctl restart ssh
Teraz otwórz nowe okno terminala na swoim komputerze i przed zamknięciem bieżącej sesji sprawdź, czy uwierzytelnianie za pomocą klucza SSH działa poprawnie.
Po zakończeniu procesu weryfikacji zamknij wszystkie uruchomione sesje.
Teraz pomyślnie skonfigurowaliśmy uwierzytelnianie oparte na kluczu SSH na naszym serwerze Ubuntu 20.04. Teraz nikt nie może zalogować się do Twojego serwera za pomocą mechanizmu logowania opartego na hasłach.