Краткая инструкция: создание и использование пары из открытого и закрытого ключей SSH для виртуальных машин Linux в Azure

Область применения: ✔️ Виртуальные машины Linux ✔️ Гибкие масштабируемые наборы

С помощью пары ключей Secure Shell (SSH) в Azure можно создавать виртуальные машины, использующие ключи SSH для проверки подлинности. В этой статье показано, как быстро создать и использовать пару файлов открытого и закрытого ключей SSH для виртуальных машин Linux. Эти шаги можно выполнить с помощью Azure Cloud Shell, узла macOS или Linux.

Сведения про устранение неполадок, связанных с SSH, см. в разделе об устранении неполадок подключения SSH к виртуальной машине Linux в Azure, которая стала неработоспособной, выдает ошибки или отказала в подключении.

Примечание.

В настройках виртуальных машин, созданных с помощью ключей SSH, пароли отключены по умолчанию. Это сильно усложняет выполнение атак методом подбора.

Дополнительные сведения и примеры доступны в разделе Подробное руководство по созданию пары ключей SSH и дополнительных сертификатов для виртуальной машины Linux в Azure.

Дополнительные способы создания и использования ключей SSH на компьютере Windows описываются в разделе Использование ключей SSH с Windows в Azure.

Поддерживаемые форматы ключей SSH

В настоящее время Azure поддерживает следующие типы ключей:

  • Протокол SSH 2 (SSH-2) RSA (Rivest, Shamir, Adleman) с минимальной длиной 2048 бит
  • ED25519 Ключи с фиксированной длиной 256 бит

Другие ключевые форматы, такие как Elliptic-curve Diffie-Hellman (ECDH) и алгоритм цифровой подписи эллиптических кривых (ECDSA) в настоящее время не поддерживаются.

Создание пары ключей SSH

Чтобы создать файлы открытого и закрытого ключей SSH, используйте команду ssh-keygen. По умолчанию эти файлы хранятся в каталоге ~/.ssh. Можно указать другое расположение и необязательный пароль (парольную фразу) для доступа к файлу закрытого ключа. Если в выбранном расположении существует пара ключей SSH с теми же именами, они будут перезаписаны.

Следующая команда создает пару 4096-разрядных ключей SSH, использующих шифрование RSA:

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

Следующая команда создает пару ключей SSH с помощью шифрования ED25519 с фиксированной длиной 256 бит:

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

Примечание.

Вы также можете создать пары ключей с помощью Azure CLI и команды az sshkey create, как описано в статье Создание и хранение ключей SSH.

При использовании Azure CLI 2.0 для создания виртуальной машины можно дополнительно создать файлы открытого и закрытого ключей SSH, выполнив команду az vm create с параметром --generate-ssh-keys. Файлы ключей хранятся в каталоге ~/.ssh, если не указано иное с помощью параметра --ssh-dest-key-path. Если пара ключей SSH уже существует и --generate-ssh-keys используется параметр, новая пара ключей не будет создана, а вместо существующей пары ключей будет использоваться. В следующей команде замените VMname, RGname и UbuntuLTS собственными значениями:

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

Примечание.

az sshkey create command deafults to RSA encryption and be use to generate ED25519 key pairs, но вы можете создать пару ключей ED25519 с помощью SSH-keygen, как описано выше, и использовать этот открытый ключ для создания виртуальной машины.

Предоставление открытого ключа SSH при развертывании виртуальной машины

Чтобы создать виртуальную машину Linux, которая использует ключи SSH для аутентификации, укажите свой открытый ключ SSH при создании виртуальной машины с помощью портала Azure, Azure CLI, шаблонов Resource Manager или других методов.

Если вам не знаком формат открытого ключа SSH, можно отобразить открытый ключ командой cat, при необходимости заменив ~/.ssh/id_rsa.pub путем и именем файла собственного открытого ключа.

Пара ключей RSA

cat ~/.ssh/id_rsa.pub

Обычное значение открытого ключа RSA выглядит следующим образом:

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

пара ключей ED25519

cat ~/.ssh/id_ed25519.pub

Обычное значение открытого ключа ED25519 выглядит следующим образом:

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILRjWGWLeiUQ3U9fNnCsNpXIyACpD/Jbm09OZGsz3DIM username@domainname

Если вы копируете содержимое файла открытого ключа и вставляете его на портале Azure или в шаблоне Resource Manager, в этом содержимом не должно быть завершающего пробела. Чтобы скопировать открытый ключ в macOS, можно передать файл открытого ключа в pbcopy. Аналогичным образом в Linux можно передать файл открытого ключа в такие программы как xclip.

Открытый ключ, который вы размещаете на виртуальной машине Linux в Azure, по умолчанию хранится ~/.ssh/ в каталоге, если вы не указали другое расположение при создании пары ключей. При использовании Azure CLI 2.0 для создания виртуальной машины с использованием существующего открытого ключа укажите значение и (необязательно) расположение этого ключа, выполнив команду az vm create с параметром --ssh-key-values. В следующей команде замените myVM, myResourceGroup, UbuntuLTS, azureuser и mysshkey.pub собственными значениями:

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

Если вы хотите использовать несколько ключей SSH с виртуальной машиной, их можно ввести в список, разделенный запятыми, как показано ниже --ssh-key-values sshkey-desktop.pub, sshkey-laptop.pub.

SSH-подключение к виртуальной машине

С помощью открытого ключа, развернутого на виртуальной машине Azure, и закрытого ключа в локальной системе установите SSH-подключение к виртуальной машине, используя ее IP-адрес или DNS-имя. Замените azureuser и myvm.westus.cloudapp.azure.com в приведенной команде, указав имя пользователя администратора и полное доменное имя (или IP-адрес).

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

Если вы подключаетесь к этой виртуальной машине в первый раз, вам будет предложено проверить отпечаток узла. Это заманчиво принять отпечаток, представленный, но этот подход предоставляет вам возможное нападение на человека в середине. Всегда проверяйте допустимость отпечатка узла. Вам нужно сделать это только при первом подключении из клиента. Чтобы получить отпечаток узла с помощью портала, используйте функцию "Выполнение команд", чтобы выполнить команду ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub | awk '{print $2}'.

Снимок экрана: использование функции

Чтобы выполнить команду с помощью интерфейса командной строки, используйте az vm run-command invoke.

Если при создании пары ключей вы указали парольную фразу, введите ее при появлении запроса во время входа в систему. Виртуальная машина добавляется в файл ~/.ssh/known_hosts. Пока открытый ключ на виртуальной машине Azure не будет изменен или не будет удалено имя сервера из файла ~/.ssh/known_hosts, запрос на подключение не будет отображен повторно.

Если виртуальная машина использует политику доступа JIT, запросите доступ, прежде чем подключиться к виртуальной машине. Дополнительные сведения о политике JIT см. в статье Управление доступом к виртуальным машинам с помощью JIT-доступа.

Следующие шаги