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

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

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

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

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

Общие сведения о SSH и ключах

SSH — это протокол зашифрованного подключения, обеспечивающий безопасный вход в систему через незащищенные соединения. Хотя протокол SSH и обеспечивает зашифрованное подключение, использование паролей для соединений SSH все же сохраняет уязвимость виртуальной машины к атакам методом подбора. Мы рекомендуем подключаться к виртуальной машине по SSH с помощью пары "открытый ключ — закрытый ключ", также известных как ключи SSH.

  • Открытый ключ размещается на виртуальной машине.

  • Закрытый ключ остается в локальной системе. Его нужно защищать и нельзя никому предоставлять.

При использовании клиента SSH для подключения к виртуальной машине (с открытым ключом) удаленная виртуальная машина проверяет, имеется ли у клиента правильный закрытый ключ. Если у клиента есть закрытый ключ, он получает доступ к виртуальной машине.

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

Открытый ключ можно предоставить любому пользователю, но только вы (или ваша локальная инфраструктура безопасности) должны иметь доступ к вашему закрытому ключу.

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

В настоящее время платформа Azure поддерживает пары из открытого и закрытого ключей SSH-2 RSA длиной не менее 2048 битов. Другие форматы ключей, например ED25519 и ECDSA, не поддерживаются.

Использование ключей SSH и их преимущества

При создании виртуальной машины Azure с открытым ключом платформа Azure копирует его (в формате .pub) в папку ~/.ssh/authorized_keys на виртуальной машине. Ключи SSH в ~/.ssh/authorized_keys гарантируют, что при подключении клиентов с помощью SSH предоставляется соответствующий закрытый ключ. На виртуальной машине Linux Azure, которая использует ключи SSH для проверки подлинности, Azure отключает систему проверки пароля на сервере SSH и разрешает только проверку подлинности ключа SSH. Создавая виртуальные машины Linux в Azure с использованием ключей SSH, вы защищаете это развертывание и выполняете стандартный шаг настройки после развертывания — отключаете пароли в файле sshd_config.

Если вы не хотите использовать ключи SSH, можно настроить на виртуальной машине Linux проверку пароля. Этого достаточно для виртуальных машин без интернет-доступа. Но пользователь по-прежнему должен управлять своими паролями для каждой виртуальной машины Linux, а также обеспечивать работоспособные политики паролей и предоставлять рекомендации, к примеру, в отношении минимальной длины паролей и регулярных обновлений системы.

Создание ключей с помощью ssh-keygen

Чтобы создать ключи, предпочтительная команда — ssh-keygenэто команда, доступная с служебными программами OpenSSH в Azure Cloud Shell, узле macOS или Linux и Windows (10 и 11). Команд ssh-keygen задает несколько вопросов, а затем записывает закрытый ключ и соответствующий открытый ключ.

Ключи SSH по умолчанию хранятся в каталоге ~/.ssh. Если у вас нет каталога ~/.ssh, создайте его с правильными разрешениями с помощью команды ssh-keygen. Ключ SSH создается как ресурс и хранится в Azure для последующего использования.

Примечание.

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

Простой пример

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

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

Подробный пример

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

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

Описание команды

ssh-keygen — программа, с помощью которой создаются ключи.

-m PEM — преобразование ключа в формат PEM.

-t rsa — тип создаваемого ключа; в данном случае создается ключ в формате RSA.

-b 4096 — количество битов в ключе; в данном случае ключ содержит 4096 битов.

-C "azureuser@myserver" — комментарий, который будет добавлен в конец файла открытого ключа для идентификации. Обычно в качестве комментария используется адрес электронной почты, но вы можете выбрать для своей инфраструктуры любой удобный метод идентификации.

-f ~/.ssh/mykeys/myprivatekey — имя файла закрытого ключа, если вы решили не использовать имя по умолчанию. В том же каталоге будет создан соответствующий файла открытого ключа с .pub в имени. Каталог должен существовать.

-N mypassphrase — дополнительная парольная фраза, используемая для доступа к файлу закрытого ключа.

Пример с 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]-----+

Сохраненные файлы ключей

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

Имя пары ключей, используемое в этой статье. По умолчанию пара ключей называется id_rsa. Так как некоторые инструменты ищут закрытый ключ в файле id_rsa, имеет смысл создать такой файл. Пары ключей SSH и файл конфигурации SSH по умолчанию располагаются в каталоге ~/.ssh/. Если не указать полный путь, ssh-keygen создаст ключи в текущем рабочем каталоге, а не в стандартном каталоге ~/.ssh.

Список содержимого каталога ~/.ssh

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

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

Парольная фраза ключа

Enter passphrase (empty for no passphrase):

Мы настоятельно рекомендуем добавить парольную фразу в закрытый ключ. Если не защитить файл ключа парольной фразой, любой пользователь, у которого есть этот файл, сможет использовать его, чтобы войти на любой из серверов, на котором используется соответствующий открытый ключ. Добавив парольную фразу, вы усилите защиту на случай, если другой пользователь получит доступ к файлу закрытого ключа. Это даст вам время, чтобы изменить ключи.

Автоматическое создание ключей во время развертывания

При использовании Azure CLI для создания виртуальных машин можно дополнительно создать файлы открытого и закрытого ключей SSH, выполнив команду az vm create с параметром --generate-ssh-keys. Эти ключи хранятся в каталоге ~/.ssh. Обратите внимание, что этот параметр команды не перезаписывает ключи, если они уже существуют в этом расположении, например как это бывает с некоторыми предварительно настроенными образами Коллекции вычислений.

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

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

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

cat ~/.ssh/id_rsa.pub

Пример обезличенных выходных данных приведен ниже:

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

Если вы копируете содержимое файла открытого ключа и вставляете его на портале Azure или в шаблон Resource Manager, в этом содержимом не должно быть дополнительных пробелов или символов разрыва строки. Например, при использовании macOS, чтобы скопировать содержимое файла открытого ключа (по умолчанию это ~/.ssh/id_rsa.pub), вы можете передать его в pbcopy (или другие аналогичные программы Linux, например xclip).

Если вы предпочитаете использовать открытый ключ в многострочном формате, можно создать ключ в формате RFC4716 в контейнере pem открытого ключа, созданного ранее.

Чтобы создать ключ в формате RFC4716 из существующего открытого ключа SSH, выполните следующую команду:

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

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

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

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

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

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

Использование ssh-agent для хранения парольной фразы закрытого ключа

Чтобы не вводить парольную фразу файла закрытого ключа при каждом входе с помощью SSH, вы можете использовать ssh-agent, чтобы сохранить эту фразу в кэше локальной системы. Если вы используете компьютер Mac, при вызове ssh-agent парольная фраза закрытого ключа будет надежно сохранена в цепочке ключей macOS.

С помощью ssh-agent и ssh-add сообщите системе SSH о файлах ключей, чтобы вам не нужно было использовать парольную фразу в интерактивном режиме.

eval "$(ssh-agent -s)"

Затем добавьте закрытый ключ к ssh-agent с помощью команды ssh-add.

ssh-add ~/.ssh/id_rsa

Теперь парольная фраза закрытого ключа хранится в ssh-agent.

Копирование ключа на имеющуюся виртуальную машину с помощью ssh-copy-id

Если виртуальная машина Linux уже создана, вы можете добавить для нее новый открытый ключ SSH с помощью ssh-copy-id:

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

Создание и настройка файла конфигурации SSH

Чтобы ускорить процесс входа и оптимизировать поведение клиента SSH, можно создать и настроить файл конфигурации SSH ~/.ssh/config.

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

Создает файл.

touch ~/.ssh/config

Изменение файла для добавления новой конфигурации SSH

vim ~/.ssh/config

Добавьте параметры конфигурации для виртуальной машины узла. В этом примере имя виртуальной машины (узла) — myvm, имя учетной записи (пользователь) — azureuser, а IP-адрес или полное доменное имя (имя узла) — 192.168.0.255.

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

Можно добавить конфигурации для дополнительных узлов, чтобы каждый из них мог использовать собственную пару ключей. Дополнительные параметры конфигурации приведены в описании файла конфигурации SSH.

Теперь, когда у вас есть пара ключей SSH и настроенный файл конфигурации SSH, вы можете пользоваться быстрым и безопасным удаленным доступом для входа на виртуальную машину Linux. При выполнении следующей команды служба SSH находит и загружает все параметры из блока Host myvm в файле конфигурации SSH.

ssh myvm

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

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

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