Jak skonfigurować klucze SSH na Ubuntu 16.04
wprowadzenie
SSH, lub secure shell, jest szyfrowanym protokołem używanym do administrowania serwerami i komunikacji z nimi. Podczas pracy z serwerem Ubuntu, są szanse, że spędzisz większość czasu w sesji terminalowej połączonej z serwerem przez SSH.
w tym przewodniku skupimy się na konfigurowaniu kluczy SSH dla instalacji vanilla Ubuntu 16.04. Klucze SSH zapewniają łatwy i bezpieczny sposób logowania 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 (zwykle na komputerze):
- 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 (opcjonalnie można przekaż flagę -b 4096
, aby utworzyć większy 4096-bitowy klucz).
Po wprowadzeniu polecenia powinieneś zobaczyć następujące wyjście:
OutputGenerating public/private rsa key pair.Enter file in which to save the key (/your_home/.ssh/id_rsa):
naciśnijENTER
, aby zapisać parę kluczy do podkatalogu.ssh/
w katalogu domowym lub podaj alternatywną ścieżkę.
jeśli wcześniej wygenerowano parę kluczy SSH, może pojawić się następujący monit:
Output/home/your_home/.ssh/id_rsa already exists.Overwrite (y/n)?
Jeśli zdecydujesz się zastąpić klucz na dysku, nie będziesz mógł już uwierzytelniać przy użyciu poprzedniego klucza. Bądź bardzo ostrożny wybierając tak, ponieważ jest to destrukcyjny proces, którego nie można odwrócić.
powinieneś zobaczyć następujący wiersz:
OutputEnter passphrase (empty for no passphrase):
tutaj opcjonalnie możesz wprowadzić bezpieczne hasło, co jest wysoce zalecane. Hasło dodaje dodatkową warstwę zabezpieczeń, aby uniemożliwić zalogowanie się nieautoryzowanym użytkownikom. Aby dowiedzieć się więcej o bezpieczeństwie, zapoznaj się z naszym samouczkiem na temat konfiguracji uwierzytelniania opartego na kluczach SSH na serwerze Linux.
powinieneś zobaczyć następujące wyjście:
OutputYour 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 username@remote_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 zalogować się za pomocą uwierzytelniania opartego na kluczu SSH.
Krok 2 — skopiuj klucz publiczny do serwera Ubuntu
najszybszym sposobem na skopiowanie klucza publicznego do hosta Ubuntu jest użycie narzędzia o nazwiessh-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ępnej na twoim komputerze klienckim, możesz użyć jednej z dwóch alternatywnych metod podanych w tej sekcji (Kopiowanie za pomocą SSH opartego na hasłach lub ręczne kopiowanie klucza).
kopiowanie klucza publicznego za pomocą ssh-copy-id
narzędziessh-copy-id
jest domyślnie dołączone do wielu systemów operacyjnych, więc możesz mieć je dostępne w systemie lokalnym. Aby ta metoda działała, musisz mieć już dostęp SSH oparty na hasłach do swojego serwera.
aby korzystać z narzędzia, wystarczy określić zdalny host, z którym chcesz się połączyć, i konto użytkownika, do którego masz dostęp SSH hasłem. Jest to konto, na które zostanie skopiowany Twój publiczny klucz SSH.
składnia jest:
- ssh-copy-id username@remote_host
Możesz zobaczyć następujący komunikat:
OutputThe 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
oznacza to, że twój lokalny komputer nie rozpoznaje zdalnego hosta. Stanie 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 kluczaid_rsa.pub
, który utworzyliśmy wcześniej. Po znalezieniu klucza zostanie wyświetlony monit o podanie hasła do konta użytkownika zdalnego:
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 (Twoje wpisanie nie zostanie wyświetlone ze względów bezpieczeństwa) i naciśnijENTER
. Narzędzie połączy się z kontem na zdalnym hoście za pomocą podanego hasła. Następnie skopiuje zawartość Twojego klucza~/.ssh/id_rsa.pub
do pliku w katalogu głównym zdalnego konta~/.ssh
o nazwieauthorized_keys
.
powinieneś zobaczyć następujące wyjście:
OutputNumber 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 kluczid_rsa.pub
został przesłany do konta zdalnego. Możesz przejść do kroku 3.
kopiowanie klucza publicznego za pomocą SSH
Jeśli nie masz ssh-copy-id
, ale masz dostęp SSH oparty na hasłach do konta na serwerze, możesz przesłać klucze za pomocą konwencjonalnej metody SSH.
możemy to zrobić za pomocą polecenia cat
, aby odczytać zawartość publicznego klucza SSH na naszym lokalnym komputerze i przekierować go przez połączenie SSH ze zdalnym serwerem.
z drugiej strony, możemy się upewnić, że katalog ~/.ssh
istnieje i ma odpowiednie uprawnienia pod kontem, którego używamy.
możemy następnie wypisać zawartość, którą wrzuciliśmy do pliku o nazwieauthorized_keys
w tym katalogu. Użyjemy symbolu przekierowania>>
, aby dodać zawartość zamiast ją nadpisywać. To pozwoli nam dodawać klucze bez niszczenia wcześniej dodanych kluczy.
pełne polecenie wygląda tak:
- cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
możesz zobaczyć następujący komunikat:
OutputThe 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
oznacza to, że twój lokalny komputer nie rozpoznaje zdalnego hosta. Stanie się to przy pierwszym połączeniu z nowym hostem. Wpisz „Tak”i naciśnij ENTER
, aby kontynuować.
następnie powinieneś zostać poproszony o wprowadzenie hasła do zdalnego konta użytkownika:
Output [email protected]'s password:
Po wprowadzeniu hasła zawartość Twojego kluczaid_rsa.pub
zostanie skopiowana na koniec plikuauthorized_keys
konta zdalnego użytkownika. Jeśli to się powiodło, przejdź do kroku 3.
ręczne kopiowanie klucza publicznego
Jeśli nie masz dostępu SSH opartego na hasłach do swojego serwera, będziesz musiał wykonać powyższy proces ręcznie.
ręcznie dodamy zawartość Twojego plikuid_rsa.pub
do pliku~/.ssh/authorized_keys
na Twoim zdalnym komputerze.
aby wyświetlić zawartość kluczaid_rsa.pub
, wpisz go w swoim komputerze lokalnym:
- cat ~/.ssh/id_rsa.pub
zobaczysz zawartość klucza, która powinna wyglądać mniej więcej tak:
Outputssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test
Uzyskaj dostęp do zdalnego hosta przy użyciu dowolnej dostępnej metody.
Po uzyskaniu dostępu do konta na zdalnym serwerze, należy upewnić się, że katalog ~/.ssh
istnieje. Polecenie to utworzy katalog w razie potrzeby 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, używając następującego polecenia:
- echo public_key_string >> ~/.ssh/authorized_keys
w powyższym poleceniu zastąp plik public_key_string
za pomocą wyjście z polecenia cat ~/.ssh/id_rsa.pub
wykonanego w systemie lokalnym. Powinien zaczynać się od ssh-rsa AAAA...
.
na koniec upewnimy się, że katalog~/.ssh
I plikauthorized_keys
mają ustawione odpowiednie uprawnienia:
- chmod -R go= ~/.ssh
to rekurencyjnie usuwa wszystkie „grupy” i „inne” uprawnienia do katalogu~/.ssh/
.
Jeśli używasz konta root
do konfigurowania 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 tutorialu nasz użytkownik ma na imię Sammy, ale w powyższym poleceniu należy podstawić odpowiednią nazwę użytkownika.
możemy teraz próbować uwierzytelniania bez hasła za pomocą naszego serwera Ubuntu.
Krok 3 — Uwierzytelnij się na Ubuntu Server za pomocą 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 konta zdalnego.
proces podstawowy jest taki sam:
- ssh username@remote_host
Jeśli po raz pierwszy łączysz się z tym hostem (jeśli użyłeś ostatniej metody powyżej), możesz zobaczyć coś takiego:
OutputThe 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
oznacza to, ż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 do swojego klucza prywatnego, zostaniesz natychmiast zalogowany. Jeśli podczas tworzenia klucza podano hasło klucza prywatnego, zostanie wyświetlony monit o jego wprowadzenie (należy pamiętać, że naciśnięcia klawiszy nie będą wyświetlane w sesji terminala dla bezpieczeństwa). Po uwierzytelnieniu należy otworzyć nową sesję powłoki z skonfigurowanym kontem na serwerze Ubuntu.
jeśli uwierzytelnianie oparte na kluczach powiodło się, kontynuuj, aby dowiedzieć się, jak jeszcze bardziej zabezpieczyć system, wyłączając uwierzytelnianie hasłem.
Krok 4 — Wyłącz uwierzytelnianie hasłem na 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 na swoim koncie. Jednak mechanizm uwierzytelniania oparty na Hasle jest nadal aktywny, co oznacza, że serwer jest nadal narażony na ataki brute-force.
przed wykonaniem czynności opisanych w tej sekcji upewnij się, że masz skonfigurowane uwierzytelnianie oparte na kluczach SSH dla konta root na tym serwerze lub, najlepiej, że masz skonfigurowane uwierzytelnianie oparte na kluczach SSH dla konta innego niż root na tym serwerze z uprawnieniami sudo
. Ten krok spowoduje zablokowanie logowania opartego na hasłach, więc zapewnienie, że nadal będziesz mógł uzyskać dostęp administracyjny, ma kluczowe znaczenie.
Po potwierdzeniu, że Twoje zdalne konto ma uprawnienia administracyjne, Zaloguj się do zdalnego serwera za pomocą kluczy SSH, jako root lub za pomocą konta z uprawnieniami sudo
. Następnie otwórz plik konfiguracyjny demona SSH:
- sudo nano /etc/ssh/sshd_config
wewnątrz pliku wyszukaj dyrektywę o nazwiePasswordAuthentication
. Można to skomentować. Odkomentuj linię I ustaw wartość na „nie”. Spowoduje to wyłączenie możliwości logowania się przez SSH przy użyciu haseł do konta:
...PasswordAuthentication no...
Zapisz i zamknij plik po zakończeniu, naciskając CTRL
X
, a następnie Y
, aby potwierdzić zapisanie pliku, i wreszcie ENTER
, aby zakończyć nano. Aby faktycznie wprowadzić te zmiany, musimy ponownie uruchomić usługęsshd
:
- sudo systemctl restart ssh
jako środek ostrożności, otwórz nowe okno terminala i sprawdź, czy usługa SSH działa poprawnie przed zamknięciem tej sesji:
- ssh username@remote_host
po zweryfikowaniu usługi SSH możesz bezpiecznie zamknąć wszystkie bieżące sesje serwera.
Demon SSH na Twoim serwerze Ubuntu reaguje teraz tylko na klucze SSH. Uwierzytelnianie oparte na Hasle zostało pomyślnie wyłączone.
wniosek
powinieneś mieć teraz skonfigurowane uwierzytelnianie oparte na kluczu SSH na serwerze, co pozwala zalogować 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.