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


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

Расширение VMAccess используется для управления администраторами, настройки SSH и проверки или восстановления дисков на виртуальных машинах Linux Azure. Расширение интегрируется с шаблонами Azure Resource Manager. Его также можно вызвать с помощью Azure CLI, Azure PowerShell, портал 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+
Rocky Linux 9.x+ 9.x+
SLES 12.x+, 15.x+ 15.x SP4+
Ubuntu 18.04+, 20.04+, 22.04+ 20.04+, 22.04+

Советы

  • VMAccess предназначен для восстановления доступа к виртуальной машине с учетом потери доступа. На основе этого принципа она предоставляет разрешение sudo учетной записи, указанной в поле имени пользователя. Если вы не хотите, чтобы пользователь мог получить разрешения sudo, войдите на виртуальную машину и используйте встроенные средства (например, usermod, chage и т. д.) для управления непривилегированных пользователей.
  • К виртуальной машине может применяться только одна версия расширения. Чтобы выполнить второе действие, обновите существующее расширение с новой конфигурацией.
  • Во время обновления пользователя VMAccess изменяет sshd_config файл и заранее создает резервную копию. Чтобы восстановить исходную конфигурацию 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
    } 
  }
}

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

Имя. Значение и пример Тип данных
версия_API 2023-09-01 Дата
издатель Microsoft.OSTCExtensions строка
type VMAccessForLinux строка
typeHandlerVersion 1.5 INT

Параметры значений свойств

Имя. Тип данных Description
check_disk boolean Проверка диска (необязательно). Только один между check_disk и repair_disk может иметь значение true.
repair_disk boolean Проверка диска (необязательно). Только один между check_disk и repair_disk может иметь значение true.
disk_name строка Имя диска для восстановления (требуется, если repair_disk имеет значение true).
username строка Имя пользователя для управления (требуется для всех действий в учетной записи пользователя).
password строка Пароль, заданный для учетной записи пользователя.
ssh_key строка Открытый ключ SSH, добавляемый для учетной записи пользователя. Ключ SSH может находиться в формате или ssh-ed25519.pem в ssh-rsaформате.
reset_ssh boolean Следует ли сбрасывать SSH. Если trueон заменяет файл sshd_config внутренним файлом ресурсов, соответствующим конфигурации SSH по умолчанию для этого дистрибутива.
remove_user строка Имя удаляемого пользователя. Нельзя использовать с reset_ssh, restore_backup_sshи password.
expiration строка Срок действия, заданный для учетной записи, в виде yyyy-mm-dd. По умолчанию никогда не требуется.
remove_prior_keys boolean Следует ли удалять старые ключи SSH при добавлении нового. Должен использоваться с ssh_key.
restore_backup_ssh boolean Следует ли восстановить исходную резервную копию 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 use the VM Extension. Чтобы использовать эти команды, необходимо установить последнюю версию 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

Вы также можете использовать команду 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"}'

--protected-settings Кроме того, параметры --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 существуют локально на виртуальной машине и наиболее информативны при устранении неполадок.

Расположение Description
/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

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

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

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