Udostępnij za pośrednictwem


Szybkie kroki: tworzenie i używanie pary kluczy publicznych-prywatnych SSH dla maszyn wirtualnych z systemem Linux na platformie Azure

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

Za pomocą pary kluczy secure shell (SSH) można tworzyć maszyny wirtualne na platformie Azure, które używają kluczy SSH do uwierzytelniania. W tym artykule przedstawiono sposób szybkiego generowania i używania pary plików kluczy publicznych-prywatnych SSH dla maszyn wirtualnych z systemem Linux. Te kroki można wykonać za pomocą usługi Azure Cloud Shell, systemu macOS lub hosta z systemem Linux.

Aby uzyskać pomoc dotyczącą rozwiązywania problemów z protokołem SSH, zobacz Rozwiązywanie problemów z połączeniami SSH z maszyną wirtualną z systemem Linux platformy Azure, która kończy się niepowodzeniem, błędami lub jest odrzucana.

Uwaga

Maszyny wirtualne utworzone przy użyciu kluczy SSH są domyślnie skonfigurowane z wyłączonymi hasłami, co znacznie zwiększa trudności z atakami siłowymi.

Aby uzyskać więcej informacji i przykładów, zobacz Szczegółowe kroki tworzenia par kluczy SSH.

Aby uzyskać dodatkowe sposoby generowania i używania kluczy SSH na komputerze z systemem Windows, zobacz How to use SSH keys with Windows on Azure (Jak używać kluczy SSH w systemie Windows na platformie Azure).

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.

Tworzenie pary kluczy SSH

Użyj polecenia , ssh-keygen aby wygenerować pliki kluczy publicznych i prywatnych SSH. Domyślnie te pliki są tworzone w katalogu ~/.ssh. Możesz określić inną lokalizację i opcjonalne hasło (hasło), aby uzyskać dostęp do pliku klucza prywatnego. Jeśli para kluczy SSH o tej samej nazwie istnieje w danej lokalizacji, te pliki są zastępowane.

Następujące polecenie tworzy parę kluczy SSH przy użyciu szyfrowania RSA i długości bitu 4096:

ssh-keygen -m PEM -t rsa -b 4096 -f ~/.ssh/id_rsa.pem

Następujące polecenie tworzy parę kluczy SSH przy użyciu szyfrowania ED25519 o stałej długości 256 bitów:

ssh-keygen -m PEM -t ed25519 -f ~/.ssh/id_ed25519.pem

Uwaga

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

Jeśli używasz interfejsu wiersza polecenia platformy Azure do tworzenia maszyny wirtualnej za pomocą polecenia az vm create , możesz opcjonalnie wygenerować pliki kluczy publicznych i prywatnych SSH przy użyciu --generate-ssh-keys opcji . Pliki kluczy są przechowywane w katalogu ~/.ssh, chyba że określono inaczej z opcją --ssh-dest-key-path . Jeśli para kluczy SSH już istnieje i --generate-ssh-keys jest używana opcja, nowa para kluczy nie zostanie wygenerowana, ale zamiast tego zostanie użyta istniejąca para kluczy. W poniższym poleceniu zastąp wartość VMname, RGname i UbuntuLTS własnymi wartościami:

az vm create --name VMname --resource-group RGname --image Ubuntu2204 --generate-ssh-keys

Uwaga

az sshkey create polecenie deafults do szyfrowania RSA i nie może służyć do generowania par kluczy ED25519, jednak można utworzyć parę kluczy ED25519 przy użyciu ssh-keygen zgodnie z powyższym opisem, a następnie użyć tego klucza publicznego do utworzenia maszyny wirtualnej.

Podawanie klucza publicznego SSH podczas wdrażania maszyny wirtualnej

Aby utworzyć maszynę wirtualną z systemem Linux używającą kluczy SSH do uwierzytelniania, określ klucz publiczny SSH podczas tworzenia maszyny wirtualnej przy użyciu witryny Azure Portal, interfejsu wiersza polecenia platformy Azure, szablonów usługi Azure Resource Manager lub innych metod:

Jeśli nie znasz formatu klucza publicznego SSH, możesz wyświetlić klucz publiczny za pomocą następującego cat polecenia, zastępując ~/.ssh/id_rsa.pub ciąg ścieżką i nazwą pliku własnego klucza publicznego w razie potrzeby:

Para kluczy RSA

cat ~/.ssh/id_rsa.pub

Typowa wartość klucza publicznego RSA wygląda następująco:

ssh-rsa AAAAB3NzaC1yc2EAABADAQABAAACAQC1/KanayNr+Q7ogR5mKnGpKWRBQU7F3Jjhn7utdf7Z2iUFykaYx+MInSnT3XdnBRS8KhC0IP8ptbngIaNOWd6zM8hB6UrcRTlTpwk/SuGMw1Vb40xlEFphBkVEUgBolOoANIEXriAMvlDMZsgvnMFiQ12tD/u14cxy1WNEMAftey/vX3Fgp2vEq4zHXEliY/sFZLJUJzcRUI0MOfHXAuCjg/qyqqbIuTDFyfg8k0JTtyGFEMQhbXKcuP2yGx1uw0ice62LRzr8w0mszftXyMik1PnshRXbmE2xgINYg5xo/ra3mq2imwtOKJpfdtFoMiKhJmSNHBSkK7vFTeYgg0v2cQ2+vL38lcIFX4Oh+QCzvNF/AXoDVlQtVtSqfQxRVG79Zqio5p12gHFktlfV7reCBvVIhyxc2LlYUkrq4DHzkxNY5c9OGSHXSle9YsO3F1J5ip18f6gPq4xFmo6dVoJodZm9N0YMKCkZ4k1qJDESsJBk2ujDPmQQeMjJX3FnDXYYB182ZCGQzXfzlPDC29cWVgDZEXNHuYrOLmJTmYtLZ4WkdUhLLlt5XsdoKWqlWpbegyYtGZgeZNRtOOdN6ybOPJqmYFd2qRtb4sYPniGJDOGhx4VodXAjT09omhQJpE6wlZbRWDvKC55R2d/CSPHJscEiuudb+1SG2uA/oik/WQ== username@domainname

para kluczy ED25519

cat ~/.ssh/id_ed25519.pub

Typowy ED25519 wartość klucza publicznego wygląda następująco:

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILRjWGWLeiUQ3U9fNnCsNpXIyACpD/Jbm09OZGsz3DIM username@domainname

Jeśli skopiujesz i wklejesz zawartość pliku klucza publicznego do użycia w witrynie Azure Portal lub szablonie usługi Resource Manager, upewnij się, że nie skopiujesz żadnych końcowych białych znaków. Aby skopiować klucz publiczny w systemie macOS, możesz przekazać plik klucza publicznego do pbcopypliku . Podobnie w systemie Linux można przekazać plik klucza publicznego do programów, takich jak xclip.

Klucz publiczny umieszczany na maszynie wirtualnej z systemem Linux na platformie Azure jest domyślnie przechowywany w ~/.ssh/ katalogu, chyba że podczas tworzenia pary kluczy określono inną lokalizację. Aby użyć interfejsu wiersza polecenia platformy Azure 2.0 do utworzenia maszyny wirtualnej przy użyciu istniejącego klucza publicznego, określ wartość i opcjonalnie lokalizację tego klucza publicznego przy użyciu polecenia az vm create z opcją --ssh-key-values . W poniższym poleceniu zastąp ciąg myVM, myResourceGroup, UbuntuLTS, azureuser i mysshkey.pub własnymi wartościami:

az vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --image Ubuntu2204 \
  --admin-username azureuser \
  --ssh-key-values mysshkey.pub

Jeśli chcesz użyć wielu kluczy SSH z maszyną wirtualną, możesz wprowadzić je na liście rozdzielanej przecinkami, w następujący sposób --ssh-key-values sshkey-desktop.pub, sshkey-laptop.pub.

Łączenie z maszyną wirtualną za pośrednictwem protokołu 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. W poniższym poleceniu zastąp ciąg azureuser i myvm.westus.cloudapp.azure.com nazwą użytkownika administratora i w pełni kwalifikowaną nazwą domeny (lub adresem IP):

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

Jeśli łączysz się z tą maszyną wirtualną po raz pierwszy, zostanie wyświetlony monit o zweryfikowanie odcisku palca hosta. Kuszące jest zaakceptowanie przedstawionego odcisku palca, ale to podejście naraża Cię na możliwy atak typu person-in-the-middle. Zawsze należy zweryfikować odcisk palca hosta. Należy to zrobić tylko przy pierwszym nawiązaniu połączenia z poziomu klienta. Aby uzyskać odcisk palca hosta za pośrednictwem portalu, użyj funkcji Uruchom polecenie, aby wykonać polecenie ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub | awk '{print $2}'.

Zrzut ekranu przedstawiający użycie polecenia Uruchom w celu zweryfikowania odcisku palca hosta.

Aby uruchomić polecenie przy użyciu interfejsu wiersza polecenia, użyj polecenia az vm run-command invoke.

Jeśli podczas tworzenia pary kluczy określono hasło, wprowadź to hasło po wyświetleniu monitu podczas procesu logowania. Maszyna wirtualna zostanie dodana do pliku ~/.ssh/known_hosts i nie zostanie wyświetlona prośba o ponowne nawiązanie połączenia, dopóki klucz publiczny na maszynie wirtualnej platformy Azure nie ulegnie zmianie lub nazwa serwera zostanie usunięta z pliku ~/.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.

Następne kroki