Partager via


Extension VMAccess pour Linux

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 +
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+
Linux rocailleux 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. Il transforme ChallengeResponseAuthentication en no et PasswordAuthentication en yes. 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
éditeur Microsoft.OSTCExtensions ficelle
type VMAccessForLinux ficelle
typeHandlerVersion 1,5 Int

Valeurs de la propriété Settings

Nom Type de données Descriptif
check_disk booléen 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.
réparer_disque booléen 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.
nom_du_disque ficelle Nom du disque à réparer (obligatoire quand repair_disk est défini sur true).
nom d'utilisateur ficelle Nom de l’utilisateur à gérer (obligatoire pour toutes les actions sur un compte d’utilisateur).
mot de passe ficelle Mot de passe à définir pour le compte d’utilisateur.
ssh_key ficelle Clé publique SSH à ajouter pour le compte d’utilisateur. La clé SSH peut être au format ssh-rsa, ssh-ed25519 ou .pem.
réinitialiser SSH booléen 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.
supprimer_utilisateur ficelle Nom de l’utilisateur à supprimer. Ne peut pas être utilisé avec reset_ssh, restore_backup_ssh et password.
date d'expiration ficelle Date d’expiration à définir pour le compte, sous la forme yyyy-mm-dd. Par défaut, le compte n’expire jamais.
supprimer_les_clés_précédentes booléen 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 booléen 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

Remarque

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 Descriptif
/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

Messages d’erreur

Erreur Descriptif
L’approvisionnement de l’extension de machine virtuelle enablevmaccess a expiré. L’approvisionnement d’extension a pris trop de temps. L’extension n’a pas fait état d’un message. Pour plus d’informations sur la résolution des problèmes, consultez https://aka.ms/vmextensionlinuxtroubleshoot. Le message d’erreur indique que le provisionnement de l’extension de machine virtuelle « enablevmaccess » a expiré en raison d’un délai trop long. En outre, l’extension n’a pas fourni de message d’état pendant le processus. Pour résoudre ce problème, envisagez de vérifier les performances et les conditions réseau de la machine virtuelle, puis réessayez l’opération d’approvisionnement. Pour plus d’informations, consultez Résoudre les problèmes liés aux extensions de machine virtuelle.
La machine virtuelle a signalé un échec lors du traitement de l’extension « enablevmaccess » (publisher « Microsoft.OSTCExtensions » et tapez « VMAccessForLinux »). Message d’erreur : « Échec de l’activation : aucun mot de passe ou aucune ssh_key n’est spécifié. » Pour plus d’informations sur la résolution des problèmes, consultez https://aka.ms/vmextensionlinuxtroubleshoot . Le message d’erreur indique que la machine virtuelle n’a pas pu traiter l’extension « enablevmaccess », car aucun mot de passe ou clé SSH n’a été spécifié. Cet échec est associé à l’éditeur « Microsoft.OSTCExtensions » et au type « VMAccessForLinux ». Pour résoudre ce problème, vérifiez qu’un mot de passe ou une clé SSH est fourni pendant la configuration de l’extension.

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.