Extension VMAccess pour Linux

Attention

Cet article fait référence à CentOS, une distribution Linux proche de l’état EOL (End Of Life). Faites le point sur votre utilisation et organisez-vous en conséquence. Pour plus d’informations, consultez les Conseils sur la fin de vie CentOS.

L’extension VMAccess est utilisée pour gérer les utilisateurs administratifs, configurer SSH, et vérifier ou réparer des disques sur des machines virtuelles Linux Azure. L’extension s’intègre aux modèles Azure Resource Manager. Vous pouvez aussi l’appeler en utilisant Azure CLI, Azure PowerShell, le portail Azure et l’API REST Machines virtuelles Azure.

Cet article explique comment exécuter l’extension VMAccess depuis Azure CLI et via un modèle Azure Resource Manager. Il indique également la procédure de résolution des problèmes pour les systèmes Linux.

Remarque

Si vous utilisez l’extension VMAccess pour réinitialiser le mot de passe de votre machine virtuelle après avoir installé l’extension de connexion Microsoft Entra, réexécutez l’extension de connexion Microsoft Entra pour réactiver la connexion Microsoft Entra pour votre machine virtuelle.

Prérequis

Distributions de Linux prises en charge

Distribution Linux x64 ARM64
Alma Linux 9.x + 9.x +
CentOS 7.x+, 8.x+ 7.x+
Debian > 10 11.x+
Flatcar Linux 3374.2.x+ 3374.2.x+
Linux Azure 2.x 2.x
OpenSUSE 12.3+ Non pris en charge
Oracle Linux 6.4+, 7.x+, 8.x+ Non pris en charge
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+

Conseils

  • VMAccess a été conçu pour récupérer l’accès à une machine virtuelle quand cet accès est perdu. Sur la base de ce principe, il accorde l’autorisation sudo au compte spécifié dans le champ du nom d’utilisateur. Si vous ne souhaitez pas qu’un utilisateur obtienne des autorisations sudo, connectez-vous à la machine virtuelle et utilisez des outils intégrés (par exemple usermod, chage, etc.) pour gérer les utilisateurs non privilégiés.
  • Une seule version de l’extension peut être appliquée à une machine virtuelle. Pour exécuter une deuxième action, mettez à jour l’extension existante avec une nouvelle configuration.
  • Lors de la mise à jour d’un utilisateur, VMAccess modifie le fichier sshd_config et en effectue préalablement une sauvegarde. Pour restaurer la configuration SSH d’origine sauvegardée, exécutez VMAccess avec restore_backup_ssh défini sur True.

Schéma d’extensions

La configuration de l’extension VMAccess inclut des paramètres pour le nom d’utilisateur, les mots de passe, les clés SSH, etc. Vous pouvez stocker ces informations dans des fichiers de configuration, les spécifier dans la ligne de commande ou les inclure dans un modèle Azure Resource Manager (ARM). Le schéma JSON suivant contient toutes les propriétés disponibles pour être utilisées dans les paramètres publics et protégés.

{
  "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
    } 
  }
}

Valeurs de propriétés

Nom Valeur/Exemple Type de données
apiVersion 2023-09-01 date
publisher Microsoft.OSTCExtensions string
type VMAccessForLinux string
typeHandlerVersion 1.5 int

Valeurs de la propriété Settings

Nom Type de données Description
check_disk boolean Indique s’il faut ou non vérifier le disque (facultatif). Pour check_disk et repair_disk, une seule des deux peut être définie sur true.
repair_disk boolean Indique s’il faut ou non vérifier le disque (facultatif). Vous pouvez définir check_disk ou repair_disk sur true, mais pas les deux.
disk_name string Nom du disque à réparer (obligatoire quand repair_disk est défini sur true).
username string Nom de l’utilisateur à gérer (obligatoire pour toutes les actions sur un compte d’utilisateur).
mot de passe string Mot de passe à définir pour le compte d’utilisateur.
ssh_key string Clé publique SSH à ajouter pour le compte d’utilisateur. La clé SSH peut être au format ssh-rsa, ssh-ed25519 ou .pem.
reset_ssh boolean Indique s’il faut ou non réinitialiser le protocole SSH. Si true, il remplace le fichier sshd_config par un fichier de ressources internes correspondant à la configuration SSH par défaut pour cette distribution.
remove_user string Nom de l’utilisateur à supprimer. Ne peut pas être utilisé avec reset_ssh, restore_backup_ssh et password.
expiration string Date d’expiration à définir pour le compte, sous la forme yyyy-mm-dd. Par défaut, le compte n’expire jamais.
remove_prior_keys boolean Indique s’il faut ou non supprimer les anciennes clés SSH lors de l’ajout d’une nouvelle clé. Doit être utilisé avec ssh_key.
restore_backup_ssh boolean Indique s’il faut ou non restaurer le fichier sshd_config d’origine sauvegardé.

Déploiement de modèle

Les extensions de machine virtuelle Azure peuvent être déployées avec des modèles Azure Resource Manager (ARM). Le schéma JSON détaillé dans la section précédente peut être utilisé dans un modèle ARM pour exécuter l’extension VMAccess pendant le déploiement du modèle. Vous trouverez un exemple de modèle qui inclut l’extension VMAccess sur GitHub.

La configuration JSON d’une extension de machine virtuelle doit être imbriquée dans le fragment de la ressource de machine virtuelle du modèle, plus précisément dans l’objet "resources": [] de la machine virtuelle et, dans le cas d’un groupe de machines virtuelles identiques, sous l’objet "virtualMachineProfile":"extensionProfile":{"extensions" :[].

Déploiement de l’interface de ligne de commande Azure

Utilisation des commandes Azure CLI vm user

Les commandes CLI suivantes sous az vm user utilisent l’extension VMAccess. Pour utiliser ces commandes, vous devez installer la dernière version d’Azure CLI et vous connecter à un compte Azure en utilisant az login.

Mettre à jour la clé SSH

L’exemple suivant met à jour la clé SSH pour l’utilisateur azureUser sur la machine virtuelle myVM :

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

Notes

La commande az vm user update ajoute le texte de la nouvelle clé publique au fichier ~/.ssh/authorized_keys pour l’utilisateur administrateur sur la machine virtuelle. Cette opération ne remplace pas ou ne supprime pas les clés SSH existantes. Cette commande ne supprime pas les clés préalablement définies au moment du déploiement ou lors des mises à jour suivantes en utilisant l’extension VMAccess.

Réinitialiser le mot de passe

L’exemple suivant réinitialise le mot de passe pour l’utilisateur azureUser sur la machine virtuelle myVM :

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

Redémarrer SSH

L’exemple suivant redémarre le démon SSH et réinitialise la configuration SSH à ses valeurs par défaut sur une machine virtuelle nommée myVM :

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

Remarque

La commande az vm user reset-ssh remplace le fichier sshd_config par un fichier de configuration par défaut provenant du répertoire des ressources internes. Cette commande ne restaure pas la configuration SSH d’origine trouvée sur la machine virtuelle.

Créer un utilisateur administratif/sudo

L’exemple suivant crée un utilisateur nommé myNewUser avec des autorisations sudo. Le compte utilise une clé SSH pour l’authentification sur la machine virtuelle nommée myVM. Cette méthode est conçue pour vous aider à réaccéder à une machine virtuelle en cas de perte ou d’oubli des informations d’identification actuelles. En guise de bonne pratique, vous devez limiter les comptes avec des autorisations sudo.

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

Supprimer un utilisateur

L’exemple suivant supprime un utilisateur nommé myNewUser sur la machine virtuelle myVM :

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

Utilisation des commandes Azure CLI vm/vmss extension

Vous pouvez également utiliser les commandes az vm extension set et az vmss extension set pour exécuter l’extension VMAccess avec la configuration spécifiée.

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"}'

Les paramètres --settings et --protected-settings acceptent également des chemins de fichier JSON. Par exemple, pour mettre à jour la clé publique SSH d’un utilisateur, créez un fichier JSON nommé update_ssh_key.json et ajoutez des paramètres au format suivant. Remplacez les valeurs dans le fichier par vos propres informations :

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

Exécutez l’extension VMAccess via la commande suivante :

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

Déploiement d’Azure PowerShell

Vous pouvez utiliser Azure PowerShell pour déployer l’extension VMAccess sur une machine virtuelle existante ou sur un groupe de machines virtuelles identiques existant. Vous pouvez déployer l’extension sur une machine virtuelle en exécutant :

$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

Vous pouvez également fournir et modifier des paramètres d’extension en utilisant des chaînes :

$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

Pour déployer sur un groupe de machines virtuelles identiques, exécutez la commande suivante :

$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

Dépannage et support technique

Les journaux de l’extension VMAccess sont stockés localement sur la machine virtuelle et contiennent des informations utiles pour la résolution des problèmes.

Emplacement Description
/var/log/waagent.log Contient les journaux de l’Agent Linux et indique quand une mise à jour de l’extension s’est produite. Nous pouvons le consulter pour vérifier que l’extension a été exécutée.
/var/log/azure/Microsoft.OSTCExtensions.VMAccessForLinux/* L’extension VMAccess produit des journaux, qui sont disponibles ici. Le répertoire contient CommandExecution.log, où vous pouvez trouver chaque commande exécutée avec son résultat, ainsi que extension.log, qui contient des journaux individuels pour chaque exécution.
/var/lib/waagent/Microsoft.OSTCExtensions.VMAccessForLinux-<version la plus récente>/config/* La configuration et les fichiers binaires de l’extension de machine virtuelle VMAccess.

Vous pouvez également récupérer l’état d’exécution de l’extension VMAccess ainsi que d’autres extensions sur une machine virtuelle donnée en exécutant la commande suivante :

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

Pour obtenir plus d’aide, vous pouvez contacter les experts Azure sur le Support de la communauté Azure. Vous pouvez également signaler un incident au support Azure. Accédez à Support Azure, puis sélectionnez Obtenir de l’aide. Pour plus d’informations sur le support Azure, consultez les plans de support Azure.

Étapes suivantes

Pour voir le code, les versions actuelles et plus de documentation, consultez VMAccess Linux – GitHub.