Jak skonfigurować klucze SSH w CentOS 7

Wprowadzenie

SSH, czyli bezpieczna powłoka, to szyfrowany protokół używany do administrowania i komunikowania się z serwerami. Podczas pracy z serwerem CentOS większość czasu spędza się w sesji terminalowej połączonej z serwerem przez SSH.

W tym przewodniku skupimy się na ustawieniu kluczy SSH dla waniliowej instalacji CentOS 7. Klucze SSH zapewniają prosty, bezpieczny sposób logowania się do serwera i są zalecane dla wszystkich użytkowników.

Krok 1 – Utwórz parę kluczy RSA

Pierwszym krokiem jest utworzenie pary kluczy na komputerze klienckim (zazwyczaj jest to Twój komputer):

  • ssh-keygen

Domyślnie ssh-keygen utworzy 2048-bitową parę kluczy RSA, która jest wystarczająco bezpieczna dla większości przypadków użycia (możesz opcjonalnie przekazać flagę -b 4096, aby utworzyć większy klucz 4096-bitowy).

Po wprowadzeniu polecenia powinien zostać wyświetlony następujący znak zachęty:

Output
Generating public/private rsa key pair.Enter file in which to save the key (/your_home/.ssh/id_rsa):

Naciśnij ENTER, aby zapisać parę kluczy w podkatalogu .ssh/ w katalogu domowym, lub określ inną ścieżkę.

Jeśli wcześniej wygenerowano parę kluczy SSH, może zostać wyświetlony następujący monit:

Output
/home/your_home/.ssh/id_rsa already exists.Overwrite (y/n)?

Jeśli wybierzesz opcję nadpisania klucza na dysku, nie będziesz już mógł uwierzytelniać się przy użyciu poprzedniego klucza. Bądź bardzo ostrożny, wybierając opcję Tak, ponieważ jest to destrukcyjny proces, którego nie można odwrócić.

Powinieneś wtedy zobaczyć następujący monit:

Output
Enter passphrase (empty for no passphrase):

W tym miejscu możesz opcjonalnie wprowadzić bezpieczną frazę hasła, co jest wysoce zalecane. Fraza hasła dodaje dodatkową warstwę zabezpieczeń, aby zapobiec logowaniu się nieautoryzowanych użytkowników. Aby dowiedzieć się więcej na temat bezpieczeństwa, zapoznaj się z naszym poradnikiem Jak skonfigurować uwierzytelnianie oparte na kluczach SSH na serwerze Linux.

Powinieneś zobaczyć następujące wyjście:

Output
Your identification has been saved in /your_home/.ssh/id_rsa.Your public key has been saved in /your_home/.ssh/id_rsa.pub.The key fingerprint is:a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 [email protected]_hostThe key's randomart image is:+------+| ..o || E o= . || o. o || .. || ..S || o o. || =o.+. ||. =++.. ||o=++. |+-----------------+

Masz teraz klucz publiczny i prywatny, którego możesz użyć do uwierzytelnienia. Następnym krokiem jest umieszczenie klucza publicznego na serwerze, aby można było użyć uwierzytelniania opartego na kluczach SSH do zalogowania się.

Krok 2 – Skopiowanie klucza publicznego na serwer CentOS

Najszybszym sposobem skopiowania klucza publicznego na host CentOS jest użycie narzędzia o nazwie ssh-copy-id. Ze względu na swoją prostotę, ta metoda jest wysoce zalecana, jeśli jest dostępna. Jeśli nie masz ssh-copy-id dostępnego na komputerze klienckim, możesz użyć jednej z dwóch alternatywnych metod podanych w tej sekcji (kopiowanie przez SSH oparte na haśle lub ręczne kopiowanie klucza).

Kopiowanie klucza publicznego przy użyciu ssh-copy-id

Narzędzie ssh-copy-id jest domyślnie dołączone do wielu systemów operacyjnych, więc możesz mieć je dostępne w swoim lokalnym systemie. Aby ta metoda działała, musisz już mieć dostęp SSH oparty na haśle do swojego serwera.

Aby użyć tego narzędzia, musisz tylko określić zdalnego hosta, z którym chcesz się połączyć, oraz konto użytkownika, do którego masz dostęp SSH oparty na haśle. Jest to konto, na które zostanie skopiowany klucz publiczny SSH.

Składnia jest następująca:

Możesz zobaczyć następujący komunikat:

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.Are you sure you want to continue connecting (yes/no)? yes

To oznacza, że Twój komputer lokalny nie rozpoznaje zdalnego hosta. Zdarzy się to przy pierwszym połączeniu z nowym hostem. Wpisz „tak” i naciśnij ENTER, aby kontynuować.

Następnie narzędzie przeskanuje Twoje konto lokalne w poszukiwaniu klucza id_rsa.pub, który utworzyliśmy wcześniej. Po znalezieniu klucza wyświetli monit o podanie hasła do konta zdalnego użytkownika:

Output
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new [email protected]'s password:

Wpisz hasło (ze względów bezpieczeństwa nie będzie ono wyświetlane) i naciśnij klawisz ENTER. Narzędzie połączy się z kontem na zdalnym hoście przy użyciu podanego hasła. Następnie skopiuje zawartość Twojego ~/.ssh/id_rsa.pub klucza do pliku w katalogu domowym ~/.ssh zdalnego konta o nazwie authorized_keys.

Powinieneś zobaczyć następujące wyjście:

Output
Number of key(s) added: 1Now try logging into the machine, with: "ssh '[email protected]'"and check to make sure that only the key(s) you wanted were added.

W tym momencie Twój id_rsa.pub klucz został przesłany na zdalne konto. Możesz kontynuować do kroku 3.

Kopiowanie klucza publicznego za pomocą SSH

Jeśli nie masz dostępnego ssh-copy-id, ale masz oparty na haśle dostęp SSH do konta na swoim serwerze, możesz przesłać swoje klucze za pomocą konwencjonalnej metody SSH.

Możemy to zrobić za pomocą polecenia cat, aby odczytać zawartość klucza publicznego SSH na naszym lokalnym komputerze i przesłać go przez połączenie SSH do zdalnego serwera.

Po drugiej stronie możemy się upewnić, że katalog ~/.ssh istnieje i ma odpowiednie uprawnienia na koncie, którego używamy.

Możemy następnie wypisać zawartość, którą przesłaliśmy do pliku o nazwie authorized_keys w tym katalogu. Użyjemy symbolu przekierowania >> do dołączenia zawartości zamiast jej nadpisywania. Pozwoli nam to dodawać klucze bez niszczenia wcześniej dodanych kluczy.

Pełne polecenie wygląda tak:

  • cat ~/.ssh/id_rsa.pub | ssh [email protected]_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

Możesz zobaczyć następujący komunikat:

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.Are you sure you want to continue connecting (yes/no)? yes

To oznacza, że Twój lokalny komputer nie rozpoznaje zdalnego hosta. Zdarzy się to przy pierwszym połączeniu z nowym hostem. Wpisz „tak” i naciśnij ENTER, aby kontynuować.

Następnie powinieneś zostać poproszony o podanie hasła do zdalnego konta użytkownika:

Output
[email protected]'s password:

Po wprowadzeniu hasła zawartość Twojego klucza id_rsa.pub zostanie skopiowana na koniec pliku authorized_keys konta zdalnego użytkownika. Przejdź do kroku 3, jeśli się to udało.

Kopiowanie klucza publicznego ręcznie

Jeśli nie masz dostępu SSH opartego na haśle do swojego serwera, będziesz musiał wykonać powyższy proces ręcznie.

Ręcznie dołączymy zawartość twojego pliku id_rsa.pub do pliku ~/.ssh/authorized_keys na twoim zdalnym komputerze.

Aby wyświetlić zawartość klucza id_rsa.pub, wpisz to na swoim lokalnym komputerze:

  • cat ~/.ssh/id_rsa.pub

Zobaczysz zawartość klucza, która powinna wyglądać mniej więcej tak:

Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== [email protected]

Dostęp do zdalnego hosta za pomocą dowolnej dostępnej metody.

Gdy masz już dostęp do swojego konta na zdalnym serwerze, powinieneś upewnić się, że katalog ~/.ssh istnieje. To polecenie utworzy katalog, jeśli to konieczne, lub nie zrobi nic, jeśli już istnieje:

  • mkdir -p ~/.ssh

Teraz możesz utworzyć lub zmodyfikować plik authorized_keys w tym katalogu. Możesz dodać zawartość swojego pliku id_rsa.pub na koniec pliku authorized_keys, tworząc go w razie potrzeby, za pomocą tego polecenia:

  • echo public_key_string >> ~/.ssh/authorized_keys

W powyższym poleceniu zastąp public_key_string danymi wyjściowymi z polecenia cat ~/.ssh/id_rsa.pub, które wykonałeś w systemie lokalnym. Powinno ono zaczynać się od ssh-rsa AAAA....

Na koniec upewnimy się, że katalog ~/.ssh i plik authorized_keys mają ustawione odpowiednie uprawnienia:

  • chmod -R go= ~/.ssh

To rekursywnie usuwa wszystkie uprawnienia „grupa” i „inne” dla katalogu ~/.ssh/.

Jeśli używasz konta root do skonfigurowania kluczy dla konta użytkownika, ważne jest również, aby katalog ~/.ssh należał do użytkownika, a nie do root:

  • chown -R sammy:sammy ~/.ssh

W tym samouczku nasz użytkownik nazywa się sammy, ale powinieneś zastąpić odpowiednią nazwę użytkownika w powyższym poleceniu.

Możemy teraz spróbować bezhasłowego uwierzytelnienia z naszym serwerem Ubuntu.

Krok 3 – Uwierzytelnianie do serwera CentOS przy użyciu kluczy SSH

Jeśli pomyślnie wykonałeś jedną z powyższych procedur, powinieneś być w stanie zalogować się do zdalnego hosta bez hasła zdalnego konta.

Podstawowy proces jest taki sam:

Jeśli jest to Twoje pierwsze połączenie z tym hostem (jeśli użyłeś ostatniej metody powyżej), możesz zobaczyć coś takiego:

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.Are you sure you want to continue connecting (yes/no)? yes

To oznacza, że Twój lokalny komputer nie rozpoznaje zdalnego hosta. Wpisz „tak”, a następnie naciśnij ENTER, aby kontynuować.

Jeśli nie podałeś hasła dla swojego klucza prywatnego, zostaniesz natychmiast zalogowany. Jeśli podałeś hasło dla klucza prywatnego podczas jego tworzenia, zostaniesz poproszony o wprowadzenie hasła teraz. Po uwierzytelnieniu powinna się otworzyć nowa sesja powłoki ze skonfigurowanym kontem na serwerze CentOS.

Jeśli uwierzytelnianie oparte na kluczach się powiodło, kontynuuj, aby dowiedzieć się, jak dalej zabezpieczyć system, wyłączając uwierzytelnianie za pomocą hasła.

Krok 4 – Wyłącz uwierzytelnianie za pomocą hasła na swoim serwerze

Jeśli udało Ci się zalogować na swoje konto za pomocą SSH bez hasła, pomyślnie skonfigurowałeś uwierzytelnianie oparte na kluczach SSH do swojego konta. Jednak Twój mechanizm uwierzytelniania oparty na haśle jest nadal aktywny, co oznacza, że Twój serwer jest nadal narażony na ataki brute-force.

Przed wykonaniem kroków w tej sekcji upewnij się, że albo masz uwierzytelnianie oparte na kluczach SSH skonfigurowane dla konta root na tym serwerze, albo najlepiej, że masz uwierzytelnianie oparte na kluczach SSH skonfigurowane dla konta nieroot na tym serwerze z uprawnieniami sudo. Ten krok zablokuje logowania oparte na hasłach, więc zapewnienie, że nadal będziesz w stanie uzyskać dostęp administracyjny, jest kluczowe.

Po potwierdzeniu, że Twoje zdalne konto ma uprawnienia administracyjne, zaloguj się do zdalnego serwera za pomocą kluczy SSH jako root lub na konto z uprawnieniami sudo. Następnie otwórz plik konfiguracyjny demona SSH:

  • sudo vi /etc/ssh/sshd_config

Wewnątrz pliku poszukaj dyrektywy o nazwie PasswordAuthentication. Może ona być zakomentowana. Naciśnij i, aby wstawić tekst, a następnie odkomentuj linię i ustaw wartość na „no”. To wyłączy możliwość logowania się przez SSH przy użyciu haseł kont:

/etc/ssh/sshd_config
...PasswordAuthentication no...

Kiedy skończysz wprowadzać zmiany, naciśnij ESC, a następnie :wq, aby zapisać zmiany do pliku i wyjść. Aby faktycznie wprowadzić te zmiany, musimy ponownie uruchomić usługę sshd:

  • sudo systemctl restart sshd.service

Jako środek ostrożności otwórz nowe okno terminala i przetestuj, czy usługa SSH działa poprawnie, zanim zamkniesz tę sesję:

Po sprawdzeniu usługi SSH możesz bezpiecznie zamknąć wszystkie bieżące sesje serwera.

Demon SSH na Twoim serwerze CentOS odpowiada teraz tylko na klucze SSH. Uwierzytelnianie oparte na haśle zostało pomyślnie wyłączone.

Wniosek

Na serwerze powinno być teraz skonfigurowane uwierzytelnianie oparte na kluczach SSH, umożliwiające logowanie się bez podawania hasła do konta.

Jeśli chcesz dowiedzieć się więcej o pracy z SSH, zapoznaj się z naszym przewodnikiem SSH Essentials Guide.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.