Szczegółowe kroki: tworzenie kluczy SSH i zarządzanie nimi na potrzeby uwierzytelniania na maszynie wirtualnej z systemem Linux na platformie Azure

Dotyczy: ✔️ Maszyny wirtualne z systemem Linux — elastyczne zestawy skalowania ✔️

Za pomocą pary kluczy secure shell (SSH) można utworzyć maszynę wirtualną z systemem Linux, która używa kluczy SSH do uwierzytelniania. W tym artykule przedstawiono sposób tworzenia i używania pary plików kluczy publicznych-prywatnych SSH RSA dla połączeń klienta SSH.

Jeśli potrzebujesz szybkich poleceń, a nie bardziej szczegółowego wyjaśnienia kluczy SSH, zobacz How to create an SSH public-private key pair for Linux VMs in Azure (Jak utworzyć parę kluczy publicznych-prywatnych SSH dla maszyn wirtualnych z systemem Linux na platformie Azure).

Aby utworzyć klucze SSH i użyć ich do nawiązania połączenia z maszyną wirtualną z systemem Linux z komputera z systemem Windows , zobacz Jak używać kluczy SSH z systemem Windows na platformie Azure. Możesz również użyć witryny Azure Portal do tworzenia kluczy SSH i zarządzania nimi na potrzeby tworzenia maszyn wirtualnych w portalu.

Omówienie protokołu SSH i kluczy

SSH to szyfrowany protokół połączenia, który zapewnia bezpieczne logowania za pośrednictwem niezabezpieczonych połączeń. Mimo że protokół SSH zapewnia zaszyfrowane połączenie, używanie haseł z połączeniami SSH nadal pozostawia maszynę wirtualną podatną na ataki siłowe. Zalecamy nawiązanie połączenia z maszyną wirtualną za pośrednictwem protokołu SSH przy użyciu pary kluczy publiczny-prywatny, nazywanej również kluczami SSH.

  • Klucz publiczny jest umieszczany na maszynie wirtualnej.

  • Klucz prywatny pozostaje w systemie lokalnym. Klucz prywatny należy chronić. Nie należy go udostępniać.

Gdy używasz klienta SSH do nawiązywania połączenia z maszyną wirtualną (która ma klucz publiczny), zdalna maszyna wirtualna testuje klienta, aby upewnić się, że ma on prawidłowy klucz prywatny. Jeśli klient ma klucz prywatny, udzielono mu dostępu do maszyny wirtualnej.

W zależności od zasad zabezpieczeń organizacji można ponownie użyć jednej pary kluczy publicznych-prywatnych, aby uzyskać dostęp do wielu maszyn wirtualnych i usług platformy Azure. Nie potrzebujesz oddzielnej pary kluczy dla każdej maszyny wirtualnej lub usługi, do której chcesz uzyskać dostęp.

Klucz publiczny może być udostępniany dowolnej osobie, ale tylko Ty (lub lokalna infrastruktura zabezpieczeń) powinien mieć dostęp do klucza prywatnego.

Obsługiwane formaty kluczy SSH

Platforma Azure obsługuje obecnie pary kluczy publicznych-prywatnych RSA protokołu SSH 2 (SSH-2) o minimalnej długości 2048 bitów. Inne formaty kluczy, takie jak ED25519 i ECDSA, nie są obsługiwane.

Korzystanie z kluczy SSH i ich zalety

Podczas tworzenia maszyny wirtualnej platformy Azure przez określenie klucza publicznego platforma Azure kopiuje klucz publiczny (w .pub formacie) do ~/.ssh/authorized_keys folderu na maszynie wirtualnej. Klucze SSH w ~/.ssh/authorized_keys programie zapewniają, że łączenie klientów przedstawia odpowiedni klucz prywatny podczas połączenia SSH. Na maszynie wirtualnej z systemem Linux platformy Azure, która używa kluczy SSH do uwierzytelniania, platforma Azure wyłącza system uwierzytelniania haseł serwera SSH i zezwala tylko na uwierzytelnianie za pomocą klucza SSH. Tworząc maszynę wirtualną z systemem Linux platformy Azure z kluczami SSH, możesz pomóc zabezpieczyć wdrożenie maszyny wirtualnej i zapisać sobie typowy krok konfiguracji po wdrożeniu sshd_config wyłączania haseł w pliku.

Jeśli nie chcesz używać kluczy SSH, możesz skonfigurować maszynę wirtualną z systemem Linux do korzystania z uwierzytelniania haseł. Jeśli maszyna wirtualna nie jest uwidoczniona w Internecie, użycie haseł może być wystarczające. Jednak nadal musisz zarządzać hasłami dla każdej maszyny wirtualnej z systemem Linux i zachować zasady i praktyki dotyczące haseł w dobrej kondycji, takie jak minimalna długość hasła i regularne aktualizacje systemu.

Generowanie kluczy za pomocą narzędzia ssh-keygen

Aby utworzyć klucze, preferowanym poleceniem jest ssh-keygenpolecenie , które jest dostępne z narzędziami OpenSSH w usłudze Azure Cloud Shell, hostem systemu macOS lub Linux i systemem Windows (10 i 11). ssh-keygen Zadaje serię pytań, a następnie zapisuje klucz prywatny i pasujący klucz publiczny.

Klucze SSH są domyślnie przechowywane w katalogu ~/.ssh. Jeśli nie masz katalogu ~/.ssh, polecenie ssh-keygen tworzy ten katalog z odpowiednimi uprawnieniami. Klucz SSH jest tworzony jako zasób i przechowywany na platformie Azure do późniejszego użycia.

Uwaga

Klucze można również utworzyć za pomocą interfejsu wiersza polecenia platformy Azure za pomocą polecenia az sshkey create, zgodnie z opisem w temacie Generowanie i przechowywanie kluczy SSH.

Przykład podstawowy

Następujące ssh-keygen polecenie domyślnie generuje 4096-bitowe pliki kluczy publicznych i prywatnych SSH RSA w ~/.ssh katalogu. Jeśli istniejąca para kluczy SSH zostanie znaleziona w bieżącej lokalizacji, te pliki zostaną zastąpione.

ssh-keygen -m PEM -t rsa -b 4096

Szczegółowy przykład

W poniższym przykładzie przedstawiono dodatkowe opcje polecenia umożliwiające utworzenie pary kluczy SSH RSA. Jeśli para kluczy SSH istnieje w bieżącej lokalizacji, te pliki są zastępowane.

ssh-keygen \
    -m PEM \
    -t rsa \
    -b 4096 \
    -C "azureuser@myserver" \
    -f ~/.ssh/mykeys/myprivatekey \
    -N mypassphrase

Opis polecenia

ssh-keygen — program używany do tworzenia kluczy

-m PEM = sformatuj klucz jako PEM

-t rsa = typ klucza do utworzenia, w tym przypadku w formacie RSA

-b 4096 = liczba bitów w kluczu, w tym przypadku 4096

-C "azureuser@myserver" — komentarz dodany na końcu pliku klucza publicznego, aby umożliwić jego łatwą identyfikację. Zwykle adres e-mail jest używany jako komentarz, ale używaj dowolnych najlepszych rozwiązań dla infrastruktury.

-f ~/.ssh/mykeys/myprivatekey = nazwa pliku klucza prywatnego, jeśli zdecydujesz się nie używać nazwy domyślnej. Odpowiedni plik klucza publicznego dołączony do .pub elementu jest generowany w tym samym katalogu. Ten katalog musi istnieć.

-N mypassphrase = dodatkowe hasło używane do uzyskiwania dostępu do pliku klucza prywatnego.

Przykład polecenia ssh-keygen

ssh-keygen -t rsa -m PEM -b 4096 -C "azureuser@myserver"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/azureuser/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/azureuser/.ssh/id_rsa.
Your public key has been saved in /home/azureuser/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:vFfHHrpSGQBd/oNdvNiX0sG9Vh+wROlZBktNZw9AUjA azureuser@myserver
The key's randomart image is:
+---[RSA 4096]----+
|        .oE=*B*+ |
|          o+o.*++|
|           .oo++*|
|       .    .B+.O|
|        S   o=BO.|
|         . .o++o |
|        . ... .  |
|         ..  .   |
|           ..    |
+----[SHA256]-----+

Zapisane pliki kluczy

Enter file in which to save the key (/home/azureuser/.ssh/id_rsa): ~/.ssh/id_rsa

Nazwa pary kluczy dla potrzeb tego artykułu. Posiadanie pary kluczy o nazwie id_rsa jest domyślne. Niektóre narzędzia mogą oczekiwać id_rsa nazwy pliku klucza prywatnego, więc posiadanie jednej z nich jest dobrym pomysłem. Katalog ~/.ssh/ jest domyślną lokalizacją par kluczy SSH oraz pliku konfiguracyjnego SSH. Jeśli nie określono pełnej ścieżki, polecenie ssh-keygen spowoduje utworzenie kluczy w bieżącym katalogu roboczym, a nie domyślnym katalogu ~/.ssh.

~/.ssh Lista katalogu

Aby wyświetlić istniejące pliki w ~/.ssh katalogu, uruchom następujące polecenie. Jeśli w katalogu nie znaleziono żadnych plików lub brakuje samego katalogu, upewnij się, że wszystkie poprzednie polecenia zostały pomyślnie uruchomione. W niektórych dystrybucjach systemu Linux może być wymagany dostęp główny do modyfikowania plików w tym katalogu.

ls -al ~/.ssh
-rw------- 1 azureuser staff  1675 Aug 25 18:04 id_rsa
-rw-r--r-- 1 azureuser staff   410 Aug 25 18:04 id_rsa.pub

Hasło klucza

Enter passphrase (empty for no passphrase):

Zdecydowanie zaleca się dodanie hasła do klucza prywatnego. Bez hasła do ochrony pliku klucza każda osoba z plikiem może użyć go do zalogowania się do dowolnego serwera, który ma odpowiedni klucz publiczny. Dodanie hasła zapewnia większą ochronę w przypadku, gdy ktoś może uzyskać dostęp do pliku klucza prywatnego, co daje ci czas na zmianę kluczy.

Automatyczne generowanie kluczy podczas wdrażania

Jeśli tworzysz maszynę wirtualną przy użyciu interfejsu wiersza polecenia platformy Azure, możesz opcjonalnie wygenerować zarówno publiczne, jak i prywatne pliki kluczy SSH, uruchamiając polecenie az vm create z opcją --generate-ssh-keys . Klucze są przechowywane w katalogu ~/.ssh. Należy pamiętać, że ta opcja polecenia nie zastępuje kluczy, jeśli już istnieją w tej lokalizacji, na przykład w przypadku niektórych wstępnie skonfigurowanych obrazów galerii obliczeniowej.

Udostępnianie klucza publicznego SSH podczas wdrażania maszyny wirtualnej

Aby utworzyć maszynę wirtualną z systemem Linux używającą kluczy SSH do uwierzytelniania, podaj klucz publiczny SSH podczas tworzenia maszyny wirtualnej przy użyciu witryny Azure Portal, interfejsu wiersza polecenia, szablonów usługi Resource Manager lub innych metod. W przypadku korzystania z portalu należy wprowadzić sam klucz publiczny. Jeśli używasz interfejsu wiersza polecenia platformy Azure do utworzenia maszyny wirtualnej z istniejącym kluczem publicznym, określ wartość lub lokalizację tego klucza publicznego, uruchamiając polecenie az vm create z opcją --ssh-key-value .

Jeśli nie znasz formatu klucza publicznego SSH, możesz zobaczyć swój klucz publiczny, uruchamiając cat~/.ssh/id_rsa.pub polecenie w następujący sposób, zastępując element własną lokalizacją pliku klucza publicznego:

cat ~/.ssh/id_rsa.pub

Dane wyjściowe są podobne do następujących (zredagowany przykład poniżej):

ssh-rsa XXXXXXXXXXc2EAAAADAXABAAABAXC5Am7+fGZ+5zXBGgXS6GUvmsXCLGc7tX7/rViXk3+eShZzaXnt75gUmT1I2f75zFn2hlAIDGKWf4g12KWcZxy81TniUOTjUsVlwPymXUXxESL/UfJKfbdstBhTOdy5EG9rYWA0K43SJmwPhH28BpoLfXXXXXG+/ilsXXXXXKgRLiJ2W19MzXHp8z3Lxw7r9wx3HaVlP4XiFv9U4hGcp8RMI1MP1nNesFlOBpG4pV2bJRBTXNXeY4l6F8WZ3C4kuf8XxOo08mXaTpvZ3T1841altmNTZCcPkXuMrBjYSJbA8npoXAXNwiivyoe3X2KMXXXXXdXXXXXXXXXXCXXXXX/ azureuser@myserver

Jeśli skopiujesz i wklejasz zawartość pliku klucza publicznego do witryny Azure Portal lub szablonu usługi Resource Manager, upewnij się, że nie kopiujesz żadnych dodatkowych białych znaków ani nie wprowadzasz dodatkowych podziałów wierszy. Jeśli na przykład używasz systemu macOS, możesz potokować plik klucza publicznego (domyślnie ~/.ssh/id_rsa.pub), aby pbcopy skopiować zawartość (istnieją inne programy z systemem Linux, które wykonują to samo, na xclipprzykład ).

Jeśli wolisz użyć klucza publicznego w formacie wielowierszowym, możesz wygenerować RFC4716 sformatowany klucz w kontenerze "pem" z utworzonego wcześniej klucza publicznego.

Aby utworzyć klucz w formacie RFC4716 przy użyciu istniejącego publicznego klucza SSH:

ssh-keygen \
-f ~/.ssh/id_rsa.pub \
-e \
-m RFC4716 > ~/.ssh/id_ssh2.pem

Nawiązywanie protokołu SSH z maszyną wirtualną przy użyciu klienta SSH

W przypadku klucza publicznego wdrożonego na maszynie wirtualnej platformy Azure oraz klucza prywatnego w systemie lokalnym protokół SSH na maszynie wirtualnej przy użyciu adresu IP lub nazwy DNS maszyny wirtualnej. Zastąp ciąg azureuser i myvm.westus.cloudapp.azure.com w poniższym poleceniu nazwą użytkownika administratora i w pełni kwalifikowaną nazwą domeny (lub adresem IP):

ssh azureuser@myvm.westus.cloudapp.azure.com

Jeśli podczas tworzenia pary kluczy podano hasło, wprowadź hasło po wyświetleniu monitu podczas procesu logowania. (Serwer zostanie dodany do folderu ~/.ssh/known_hosts i monit o ponowne połączenie nie zostanie wyświetlony, dopóki klucz publiczny na maszynie wirtualnej nie ulegnie zmianie lub nazwa serwera nie zostanie usunięta z folderu ~/.ssh/known_hosts).

Jeśli maszyna wirtualna korzysta z zasad dostępu just in time, musisz zażądać dostępu przed nawiązaniem połączenia z maszyną wirtualną. Aby uzyskać więcej informacji na temat zasad just in time, zobacz Zarządzanie dostępem do maszyn wirtualnych przy użyciu zasad just in time.

Używanie protokołu ssh-agent do przechowywania hasła klucza prywatnego

Aby uniknąć wpisywania hasła pliku klucza prywatnego przy użyciu każdego logowania SSH, możesz użyć ssh-agent do buforowania hasła pliku klucza prywatnego w systemie lokalnym. Jeśli używasz komputera Mac, pęk kluczy systemu macOS bezpiecznie przechowuje hasło klucza prywatnego podczas wywoływania .ssh-agent

Zweryfikuj i użyj ssh-agent polecenia i ssh-add , aby poinformować system SSH o plikach kluczy, aby nie trzeba było używać hasła interaktywnie.

eval "$(ssh-agent -s)"

Następnie dodaj klucz prywatny do programu ssh-agent przy użyciu polecenia ssh-add.

ssh-add ~/.ssh/id_rsa

Hasło klucza prywatnego jest teraz przechowywane w pliku ssh-agent.

Kopiowanie klucza do istniejącej maszyny wirtualnej za pomocą polecenia ssh-copy-id

Jeśli maszyna wirtualna została już utworzona, możesz dodać nowy klucz publiczny SSH do maszyny wirtualnej z systemem Linux przy użyciu polecenia ssh-copy-id.

ssh-copy-id -i ~/.ssh/id_rsa.pub azureuser@myserver

Tworzenie i konfigurowanie pliku konfiguracyjnego SSH

Możesz utworzyć i skonfigurować plik konfiguracji SSH (~/.ssh/config), aby przyspieszyć logowanie i zoptymalizować zachowanie klienta SSH.

W poniższym przykładzie przedstawiono prostą konfigurację, której można użyć do szybkiego logowania się jako użytkownik do określonej maszyny wirtualnej przy użyciu domyślnego klucza prywatnego SSH.

Utwórz plik.

touch ~/.ssh/config

Edytuj plik, aby dodać nową konfigurację SSH

vim ~/.ssh/config

Dodaj ustawienia konfiguracji odpowiednie dla maszyny wirtualnej hosta. W tym przykładzie nazwa maszyny wirtualnej (host) to myvm, nazwa konta (użytkownik) to azureuser , a adres IP lub nazwa FQDN (nazwa hosta) to 192.168.0.255.

# Azure Keys
Host myvm
  Hostname 192.168.0.255
  User azureuser
# ./Azure Keys

Możesz dodać konfiguracje dla dodatkowych hostów, aby umożliwić każdemu korzystanie z własnej dedykowanej pary kluczy. Zobacz plik konfiguracji SSH, aby uzyskać bardziej zaawansowane opcje konfiguracji.

Teraz, gdy masz parę kluczy SSH i skonfigurowany plik konfiguracji SSH, możesz szybko i bezpiecznie uzyskać dostęp zdalny do maszyny wirtualnej z systemem Linux. Po uruchomieniu następującego polecenia protokół SSH lokalizuje i ładuje wszystkie ustawienia z Host myvm bloku w pliku konfiguracji SSH.

ssh myvm

Przy pierwszym logowaniu się do serwera przy użyciu klucza SSH polecenie wyświetla monit o podanie hasła dla tego pliku klucza.

Następne kroki

W dalszej kolejności należy utworzyć maszyny wirtualne systemu Linux platformy Azure przy użyciu nowego klucza publicznego SSH. Maszyny wirtualne platformy Azure utworzone przy użyciu klucza publicznego SSH jako logowania są lepiej zabezpieczone niż maszyny wirtualne utworzone przy użyciu domyślnej metody logowania.