Поделиться через


Расширение VMAccess для Linux

Расширение VMAccess используется для управления администраторами, настройки SSH и проверки или восстановления дисков на виртуальных машинах Linux Azure. Расширение интегрируется с шаблонами Azure Resource Manager. Его также можно вызвать с помощью Azure CLI, Azure PowerShell, порталa Azure и REST API Azure виртуальных машин.

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

Замечание

Если вы используете расширение VMAccess для сброса пароля виртуальной машины после установки расширения входа Microsoft Entra, повторно запустите расширение входа Microsoft Entra, чтобы повторно включить имя входа Microsoft Entra для виртуальной машины.

Предпосылки

Поддерживаемые дистрибутивы Linux

Дистрибутив Linux x64 ARM64
AlmaLinux 9.x+ 9.x+
Debian 10+ 11.x+
Flatcar Linux 3374.2.x+ 3374.2.x+
Azure Linux 2.x 2.x
openSUSE 12.3+ Не поддерживается
Oracle Linux 6.4+, 7.x+, 8.x+ Не поддерживается
Red Hat Enterprise Linux 6.7+, 7.x+, 8.x+ 8.6+, 9.0+
Рокки Linux 9.x+ 9.x+
SLES 12.x+, 15.x+ 15.x с пакетом обновления 4 (SP4)
Ubuntu 18.04+, 20.04+, 22.04+ 20.04+, 22.04+

Советы

  • VMAccess предназначен для восстановления доступа к виртуальной машине с учетом потери доступа. На основе этого принципа она предоставляет разрешение sudo учетной записи, указанной в поле имени пользователя. Если вы не хотите, чтобы пользователь мог получить разрешения sudo, войдите на виртуальную машину и используйте встроенные средства (например, usermod, chage и т. д.) для управления непривилегированных пользователей.
  • К виртуальной машине может применяться только одна версия расширения. Чтобы выполнить второе действие, обновите существующее расширение с новой конфигурацией.
  • Во время обновления пользователя VMAccess изменяет sshd_config файл и заранее создает резервную копию. Он изменяет ChallengeResponseAuthentication на no и PasswordAuthentication на yes. Чтобы восстановить исходную резервную конфигурацию SSH, запустите VMAccess с restore_backup_ssh, установленным на True.

Схема расширения

Конфигурация расширения VMAccess включает параметры для имени пользователя, паролей, ключей SSH и т. д. Эти сведения можно хранить в файлах конфигурации, указать его в командной строке или включить в шаблон Azure Resource Manager (ARM). Следующая схема JSON содержит все свойства, доступные для использования в общедоступных и защищенных параметрах.

{
  "type": "Microsoft.Compute/virtualMachines/extensions",
  "name": "<name>",
  "apiVersion": "2023-09-01",
  "location": "<location>",
  "dependsOn": [
          "[concat('Microsoft.Compute/virtualMachines/', <vmName>)]"
  ],
  "properties": {
    "publisher": "Microsoft.OSTCExtensions",
    "type": "VMAccessForLinux",
    "typeHandlerVersion": "1.5",
    "autoUpgradeMinorVersion": true,
    "settings": {
      "check_disk": true,
      "repair_disk": false,
      "disk_name": "<disk-name>",
    },
    "protectedSettings": {
      "username": "<username>",
      "password": "<password>",
      "ssh_key": "<ssh-key>",
      "reset_ssh": false,
      "remove_user": "<username>",
      "expiration": "<expiration>",
      "remove_prior_keys": false,
      "restore_backup_ssh": true
    } 
  }
}

Значения свойств

Имя Значение и пример Тип данных
apiVersion 2023-09-01 дата
издатель Microsoft.OSTCExtensions струна
тип VMAccessForLinux струна
версияТипаОбработчика 1.5 инт

Задание значений свойств

Имя Тип данных Описание
проверка диска булевый Нужно ли проверять диск (по желанию)? Только один между check_disk и repair_disk может иметь значение true.
ремонт_диска булевый Нужно ли проверять диск (по желанию)? Только один между check_disk и repair_disk может иметь значение true.
имя_диска струна Имя диска для восстановления (требуется, если repair_disk имеет значение true).
имя пользователя струна Имя пользователя для управления (требуется для всех действий в учетной записи пользователя).
пароль струна Пароль, заданный для учетной записи пользователя.
ssh_key струна Открытый ключ SSH, добавляемый для учетной записи пользователя. Ключ SSH может быть в формате ssh-rsa, ssh-ed25519 или .pem.
reset_ssh булевый Стоит ли сбросить SSH? Если trueон заменяет файл sshd_config внутренним файлом ресурсов, соответствующим конфигурации SSH по умолчанию для этого дистрибутива.
удалить пользователя струна Имя удаляемого пользователя. Нельзя использовать с reset_ssh, restore_backup_sshи password.
истечение струна Срок действия, заданный для учетной записи, в виде yyyy-mm-dd. По умолчанию установлено значение 'никогда'.
удалить_предыдущие_ключи булевый Следует ли удалять старые ключи SSH при добавлении нового. Необходимо использовать с ssh_key.
восстановить_резервную_копию_ssh булевый Следует ли восстановить исходную резервную копию sshd_config.

Развертывание шаблона

Расширения виртуальных машин Azure можно развернуть с помощью шаблонов Azure Resource Manager (ARM). Схему JSON, описанную в предыдущем разделе, можно использовать в шаблоне ARM для запуска расширения VMAccess во время развертывания шаблона. Пример шаблона, который включает расширение VMAccess на сайте GitHub.

Файл конфигурации JSON для расширения виртуальной машины должен быть вложен во фрагмент ресурса виртуальной машины в шаблоне, в частности в объект "resources": [] для шаблона виртуальной машины или в объект "virtualMachineProfile":"extensionProfile":{"extensions" :[], если используется масштабируемый набор виртуальных машин.

Развертывание с помощью Azure CLI

Использование команд пользователей виртуальной машины Azure CLI

Следующие команды CLI в az vm user используют расширение VMAccess. Чтобы использовать эти команды, необходимо установить последнюю версию Azure CLI и войти в учетную запись Azure с помощью az login.

Обновление ключа SSH

В следующем примере обновляется ключ SSH для пользователя azureUser на виртуальной машине с именем myVM:

az vm user update \
  --resource-group myResourceGroup \
  --name myVM \
  --username azureUser \
  --ssh-key-value ~/.ssh/id_rsa.pub

Замечание

Команда az vm user update добавляет новый текст открытого ключа в ~/.ssh/authorized_keys файл для пользователя администратора на виртуальной машине. Эта команда не заменяет или не удаляет существующие ключи SSH. Эта команда не удаляет предыдущие ключи, заданные во время развертывания, или последующие обновления с помощью расширения VMAccess.

Введите новый пароль

В следующем примере сбрасывается пароль для пользователя azureUser на виртуальной машине с именем myVM:

az vm user update \
  --resource-group myResourceGroup \
  --name myVM \
  --username azureUser \
  --password myNewPassword

Перезапуск SSH

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

az vm user reset-ssh \
  --resource-group myResourceGroup \
  --name myVM

Замечание

Командаaz vm user reset-ssh заменяет файл sshd_config файлом конфигурации по умолчанию из каталога внутренних ресурсов. Эта команда не восстанавливает исходную конфигурацию SSH, найденную на виртуальной машине.

Создание пользователя с правами администратора или sudo

В следующем примере создается пользователь myNewUser с разрешениями sudo. Учетная запись использует ключ SSH для проверки подлинности на виртуальной машине с именем myVM. Этот метод помогает восстановить доступ к виртуальной машине при потере или забытии текущих учетных данных. Рекомендуется ограничить учетные записи с разрешениями sudo.

az vm user update \
  --resource-group myResourceGroup \
  --name myVM \
  --username myNewUser \
  --ssh-key-value ~/.ssh/id_rsa.pub

Удаление пользователя

В следующем примере удаляется пользователь с именем myNewUser на виртуальной машине с именем myVM:

az vm user delete \
  --resource-group myResourceGroup \
  --name myVM \
  --username myNewUser

Использование команд расширения Azure CLI для виртуальных машин и масштабируемых групп виртуальных машин (VM/VMSS)

Вы также можете использовать команду az vm extension set и az vmss extension set для запуска расширения VMAccess с указанной конфигурацией.

az vm extension set \
  --resource-group myResourceGroup \
  --vm-name myVM \
  --name VMAccessForLinux \
  --publisher Microsoft.OSTCExtensions \
  --version 1.5 \
  --settings '{"check_disk":true}'
  --protected-settings '{"username":"user1","password":"userPassword"}'

--settings и --protected-settings параметры также принимают пути к файлам JSON. Например, чтобы обновить открытый ключ SSH пользователя, создайте JSON-файл с именем update_ssh_key.json и добавьте параметры в следующем формате. Замените значения в файле собственными сведениями:

{
  "username":"azureuser",
  "ssh_key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCZ3S7gGp3rcbKmG2Y4vGZFMuMZCwoUzZNGxxxxxx2XV2x9FfAhy8iGD+lF8UdjFX3t5ebMm6BnnMh8fHwkTRdOt3LDQq8o8ElTBrZaKPxZN2thMZnODs5Hlemb2UX0oRIGRcvWqsd4oJmxsXa/Si98Wa6RHWbc9QZhw80KAcOVhmndZAZAGR+Wq6yslNo5TMOr1/ZyQAook5C4FtcSGn3Y+WczaoGWIxG4ZaWk128g79VIeJcIQqOjPodHvQAhll7qDlItVvBfMOben3GyhYTm7k4YwlEdkONm4yV/UIW0la1rmyztSBQIm9sZmSq44XXgjVmDHNF8UfCZ1ToE4r2SdwTmZv00T2i5faeYnHzxiLPA3Enub7xxxxxxwFArnqad7MO1SY1kLemhX9eFjLWN4mJe56Fu4NiWJkR9APSZQrYeKaqru4KUC68QpVasNJHbuxPSf/PcjF3cjO1+X+4x6L1H5HTPuqUkyZGgDO4ynUHbko4dhlanALcriF7tIfQR9i2r2xOyv5gxJEW/zztGqWma/d4rBoPjnf6tO7rLFHXMt/DVTkAfn5wxxtLDwkn5FMyvThRmex3BDf0gujoI1y6cOWLe9Y5geNX0oj+MXg/W0cXAtzSFocstV1PoVqy883hNoeQZ3mIGB3Q0rIUm5d9MA2bMMt31m1g3Sin6EQ== azureuser@myVM"
}

Запустите расширение VMAccess с помощью следующей команды:

az vm extension set \
  --resource-group myResourceGroup \
  --vm-name myVM \
  --name VMAccessForLinux \
  --publisher Microsoft.OSTCExtensions \
  --version 1.5 \
  --protected-settings update_ssh_key.json

Развертывание с помощью Azure PowerShell

Azure PowerShell можно использовать для развертывания расширения VMAccess в существующей виртуальной машине или масштабируемом наборе виртуальных машин. Расширение можно развернуть на виртуальной машине, выполнив следующую команду:

$username = "<username>"
$sshKey = "<cert-contents>"

$settings = @{"check_disk" = $true};
$protectedSettings = @{"username" = $username; "ssh_key" = $sshKey};

Set-AzVMExtension -ResourceGroupName "<resource-group>" `
    -VMName "<vm-name>" `
    -Location "<location>" `
    -Publisher "Microsoft.OSTCExtensions" `
    -ExtensionType "VMAccessForLinux" `
    -Name "VMAccessForLinux" `
    -TypeHandlerVersion "1.5" `
    -Settings $settings `
    -ProtectedSettings $protectedSettings

Кроме того, можно указать и изменить параметры расширения с помощью строк:

$username = "<username>"
$sshKey = "<cert-contents>"

$settingsString = '{"check_disk":true}';
$protectedSettingsString = '{"username":"' + $username + '","ssh_key":"' + $sshKey + '"}';

Set-AzVMExtension -ResourceGroupName "<resource-group>" `
    -VMName "<vm-name>" `
    -Location "<location>" `
    -Publisher "Microsoft.OSTCExtensions" `
    -ExtensionType "VMAccessForLinux" `
    -Name "VMAccessForLinux" `
    -TypeHandlerVersion "1.5" `
    -SettingString $settingsString `
    -ProtectedSettingString $protectedSettingsString

Чтобы развернуть в масштабируемом наборе виртуальных машин, выполните следующую команду:

$resourceGroupName = "<resource-group>"
$vmssName = "<vmss-name>"

$protectedSettings = @{
  "username" = "azureUser"
  "password" = "userPassword"
}

$publicSettings = @{
  "repair_disk" = $true
  "disk_name" = "<disk_name>"
}

$vmss = Get-AzVmss `
            -ResourceGroupName $resourceGroupName `
            -VMScaleSetName $vmssName

Add-AzVmssExtension -VirtualMachineScaleSet $vmss `
    -Name "<extension-name>" `
    -Publisher "Microsoft.OSTCExtensions" `
    -Type "VMAccessForLinux" `
    -TypeHandlerVersion "1.5"" `
    -AutoUpgradeMinorVersion $true `
    -Setting $publicSettings `
    -ProtectedSetting $protectedSettings

Update-AzVmss `
    -ResourceGroupName $resourceGroupName `
    -Name $vmssName `
    -VirtualMachineScaleSet $vmss

Устранение неполадок и поддержка

Журналы расширений VMAccess существуют локально на виртуальной машине и наиболее информативны при устранении неполадок.

Местоположение Описание
/var/log/waagent.log Содержит журналы из агента Linux и показывает, когда произошло обновление расширения. Мы можем проверить, чтобы убедиться, что расширение запустилось.
/var/log/azure/Microsoft.OSTCExtensions.VMAccessForLinux/* Расширение VMAccess создает журналы, которые можно найти здесь. Каталог содержит CommandExecution.log , где можно найти каждую команду, выполненную вместе с результатом, а также extension.logотдельные журналы для каждого выполнения.
/var/lib/waagent/Microsoft.OSTCExtensions.VMAccessForLinux-самая< последняя версия>/config/* Конфигурация и двоичные файлы для расширения виртуальной машины VMAccess.

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

az vm extension list --resource-group myResourceGroup --vm-name myVM -o table

Сообщения об ошибках

Ошибка Описание
Истекло время ожидания подготовки расширения виртуальной машины enablevmaccess. Подготовка расширения заняла слишком много времени. Расширение не передало сообщение. Дополнительные сведения об устранении неполадок доступны по адресу https://aka.ms/vmextensionlinuxtroubleshoot. Сообщение об ошибке указывает, что подготовка расширения виртуальной машины enablevmaccess прерывалась из-за превышения времени ожидания, поскольку процесс завершения занял слишком много времени. Кроме того, расширение не предоставило никакого сообщения о состоянии во время процесса. Чтобы устранить эту проблему, попробуйте проверить производительность и сетевые условия виртуальной машины и повторить операцию подготовки. Дополнительные сведения см. в разделе "Устранение неполадок с расширениями виртуальной машины".
Виртуальная машина сообщила о сбое при обработке расширения "enablevmaccess" (издатель "Microsoft.OSTCExtensions" и тип VMAccessForLinux). Сообщение об ошибке: "Включить сбой: пароль или ssh_key не указан." Дополнительные сведения об устранении неполадок доступны по адресу https://aka.ms/vmextensionlinuxtroubleshoot . Сообщение об ошибке указывает, что виртуальная машина не смогла обработать расширение enablevmaccess, так как пароль или ключ SSH не указан. Эта ошибка связана с издателем Microsoft.OSTCExtensions и типом VMAccessForLinux. Чтобы устранить эту проблему, убедитесь, что пароль или ключ SSH предоставляются во время настройки расширения.

Для получения дополнительной помощи вы можете обратиться к экспертам Azure в службе поддержки сообщества Azure. Кроме того, можно зарегистрировать обращение в службу поддержки Azure. Перейдите в службу поддержки Azure и выберите "Получить поддержку". Дополнительные сведения о поддержке Azure см. в разделе "Вопросы и ответы о планах поддержки Azure".

Дальнейшие шаги

Сведения о коде, текущих версиях и дополнительной документации см. в статье VMAccess Linux — GitHub.