Подробные инструкции: создание ключей 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 (SSH-2) RSA (Rivest, Shamir, Adleman) с минимальной длиной 2048 бит
- ED25519 Ключи с фиксированной длиной 256 бит
Другие ключевые форматы, такие как Elliptic-curve Diffie-Hellman (ECDH) и алгоритм цифровой подписи эллиптических кривых (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-keygen
Следующая команда создает 256-разрядную ED25519 файлы открытого и закрытого ключа по умолчанию в каталоге~/.ssh
. Если в текущем каталоге обнаруживается пара ключей SSH, эти файлы будут перезаписаны.
ssh-keygen -m PEM -t ed25519
Подробный пример
В следующем примере показаны дополнительные параметры команды для создания пары ключей SSH RSA. Если в текущем каталоге существует пара ключей SSH, они будут перезаписаны.
ssh-keygen \
-m PEM \
-t rsa \
-b 4096 \
-C "azureuser@myserver" \
-f ~/.ssh/mykeys/myrsaprivatekey \
-N mypassphrase
В следующем примере показаны дополнительные параметры команды для создания пары ключей SSH ED25519. Если в текущем каталоге существует пара ключей SSH, они будут перезаписаны.
ssh-keygen \
-m PEM \
-t ed25519 \
-C "azureuser@myserver" \
-f ~/.ssh/mykeys/myedprivatekey \
-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 (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]-----+
Пример 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]-----+
Сохраненные файлы ключей
Enter file in which to save the key (/home/azureuser/.ssh/id_rsa): ~/.ssh/id_rsa
or
Enter file in which to save the key (/home/azureuser/.ssh/id_ed25519): ~/.ssh/id_ed25519
Имена пар ключей по умолчанию для RSA и ED25519 соответственно id_rsa
id_ed25519
. Некоторые средства могут ожидать id_rsa
имя или id_ed25519
имя файла закрытого ключа, поэтому рекомендуется использовать одно из них. Пары ключей SSH и файл конфигурации SSH по умолчанию располагаются в каталоге ~/.ssh/
. Если не указать полный путь, ssh-keygen
создаст ключи в текущем рабочем каталоге, а не в стандартном каталоге ~/.ssh
.
Список содержимого каталога ~/.ssh
Чтобы просмотреть существующие файлы в каталоге ~/.ssh
, выполните следующую команду. Если файлы в каталоге отсутствуют или отсутствует сам каталог, убедитесь, что все предыдущие команды успешно выполнены. В некоторых дистрибутивах Linux для изменения файлов в этом каталоге может потребоваться корневой доступ.
Пара ключей 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
пара ключей 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
Парольная фраза ключа
Enter passphrase (empty for no passphrase):
Мы настоятельно рекомендуем добавить парольную фразу в закрытый ключ. Если не защитить файл ключа парольной фразой, любой пользователь, у которого есть этот файл, сможет использовать его, чтобы войти на любой из серверов, на котором используется соответствующий открытый ключ. Добавив парольную фразу, вы усилите защиту на случай, если другой пользователь получит доступ к файлу закрытого ключа. Это даст вам время, чтобы изменить ключи.
Автоматическое создание ключей во время развертывания
При использовании Azure CLI для создания виртуальных машин можно дополнительно создать файлы открытого и закрытого ключей SSH, выполнив команду az vm create с параметром --generate-ssh-keys
. Эта команда по умолчанию использует тип ключа RSA, чтобы создать ключи ED25519, которые можно передать в дополнительную команду флага --ssh-key-type
. Эти ключи хранятся в каталоге ~/.ssh. Обратите внимание, что этот параметр команды не перезаписывает ключи, если они уже существуют в этом расположении, например как это бывает с некоторыми предварительно настроенными образами Коллекции вычислений.
Простой пример
Создайте простую виртуальную машину Ubuntu Linux вместе с парой ключей SSH Ed25519.
az vm create -n MyVm -g MyResourceGroup --image Ubuntu2204 --generate-ssh-keys --ssh-key-type ed25519
Предоставление открытого ключа SSH при развертывании виртуальной машины
Чтобы создать виртуальную машину Linux, которая использует ключи SSH для аутентификации, укажите свой открытый ключ SSH при создании виртуальной машины с помощью портала Azure, интерфейса командной строки, шаблонов Resource Manager или других методов. При использовании портала вводится значение открытого ключа. При использовании Azure CLI создания виртуальной машины с использованием существующего открытого ключа укажите значение или расположение этого ключа, выполнив команду az vm create с параметром --ssh-key-value
.
Если вам не знаком формат открытого ключа SSH, чтобы просмотреть его, выполните команду cat
, заменив параметр ~/.ssh/id_rsa.pub
расположением файла собственного открытого ключа.
Пара ключей RSA
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
пара ключей ED25519
cat ~/.ssh/id_ed25519.pub
Пример обезличенных выходных данных приведен ниже:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP6I5JuhGq3RidMNpxrplIQwEfc4Rh7UyV8JYYH2U2xA azureuser@myserver
Если вы копируете содержимое файла открытого ключа и вставляете его на портале Azure или в шаблон Resource Manager, в этом содержимом не должно быть дополнительных пробелов или символов разрыва строки. Например, при использовании macOS, чтобы скопировать содержимое файла открытого ключа (по умолчанию это ~/.ssh/id_ed25519.pub
), вы можете передать его в pbcopy (или другие аналогичные программы Linux, например xclip
).
Если вы предпочитаете использовать открытый ключ в многострочном формате, можно создать ключ в формате RFC4716 в контейнере pem открытого ключа, созданного ранее.
Чтобы создать ключ формата PEM из существующего открытого ключа SSH, выполните следующую команду:
ssh-keygen \
-f ~/.ssh/id_ed25519.pub \
-e \
-m RFC4716 > ~/.ssh/id_edssh.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
or
ssh-add ~/.ssh/id_ed25519
Теперь парольная фраза закрытого ключа хранится в 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 в качестве данных для входа, защищены лучше, чем виртуальные машины, созданные с помощью метода по умолчанию, предусматривающего использование паролей.