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 obecnie obsługuje następujące typy kluczy:
- Protokół SSH 2 (SSH-2) RSA (Rivest, Shamir, Adleman) o minimalnej długości 2048 bitów
- ED25519 Klucze o stałej długości 256 bitów
Inne kluczowe formaty, takie jak Elliptic-curve Diffie-Hellman (ECDH) i Elliptic Curve Digital Signature Algorithm (ECDSA) nie są obecnie 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-keygen
polecenie , 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
Następujące ssh-keygen
polecenie domyślnie generuje 256-bitowe pliki kluczy publicznych i prywatnych ED25519 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 ed25519
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/myrsaprivatekey \
-N mypassphrase
W poniższym przykładzie przedstawiono dodatkowe opcje polecenia umożliwiające utworzenie pary kluczy SSH ED25519. Jeśli para kluczy SSH istnieje w bieżącej lokalizacji, te pliki są zastępowane.
ssh-keygen \
-m PEM \
-t ed25519 \
-C "azureuser@myserver" \
-f ~/.ssh/mykeys/myedprivatekey \
-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 narzędzia ssh-keygen (RSA)
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]-----+
Przykład narzędzia ssh-keygen (ED25519)
ssh-keygen -t ed25519 -m PEM -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_ed25519.
Your public key has been saved in /home/azureuser/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:vFfHHrpSGQBd/oNdvNiX0sG9Vh+wROlZBktNZw9AUjA azureuser@myserver
The key's randomart image is:
+---[ED25519 256]----+
| |
|.. . |
|o+.o . |
|*=o o o + + |
|*+o+ oSB + o |
|**++o.+oo = . |
|=+*..*.o E |
|.. o o.. |
| .o. |
+----[SHA256]-----+
Zapisane pliki kluczy
Enter file in which to save the key (/home/azureuser/.ssh/id_rsa): ~/.ssh/id_rsa
lub
Enter file in which to save the key (/home/azureuser/.ssh/id_ed25519): ~/.ssh/id_ed25519
Domyślne nazwy par kluczy dla rsA i ED25519 są id_rsa
i id_ed25519
odpowiednio; niektóre narzędzia mogą oczekiwać id_rsa
nazwy pliku lub id_ed25519
klucza prywatnego, więc posiadanie jednego 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.
Para kluczy RSA:
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
para kluczy ED25519:
ls -al ~/.ssh
-rw------- 1 azureuser staff 1675 Aug 25 18:04 id_ed25519
-rw-r--r-- 1 azureuser staff 410 Aug 25 18:04 id_ed25519.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
. To polecenie domyślnie określa typ klucza RSA, aby wygenerować ED25519 klucze, które można przekazać w dodatkowym poleceniu flagi --ssh-key-type
. 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.
Przykład podstawowy
Utwórz prostą maszynę wirtualną z systemem Ubuntu Linux wraz z parą kluczy SSH Ed25519.
az vm create -n MyVm -g MyResourceGroup --image Ubuntu2204 --generate-ssh-keys --ssh-key-type ed25519
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:
Para kluczy RSA
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 xclip
przykł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ć RFC4716 sformatowany klucz na podstawie istniejącego klucza publicznego SSH:
ssh-keygen \
-f ~/.ssh/id_rsa.pub \
-e \
-m RFC4716 > ~/.ssh/id_ssh2.pem
para kluczy ED25519
cat ~/.ssh/id_ed25519.pub
Dane wyjściowe są podobne do następujących (zredagowany przykład poniżej):
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP6I5JuhGq3RidMNpxrplIQwEfc4Rh7UyV8JYYH2U2xA 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_ed25519.pub
), aby pbcopy skopiować zawartość (istnieją inne programy z systemem Linux, które wykonują to samo, na xclip
przykł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 PEM przy użyciu istniejącego publicznego klucza SSH:
ssh-keygen \
-f ~/.ssh/id_ed25519.pub \
-e \
-m RFC4716 > ~/.ssh/id_edssh.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
lub
ssh-add ~/.ssh/id_ed25519
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.