Quickstart - Create a Linux virtual machine with the Azure CLI on Azure

Applies to: ✔️ Linux VMs

This quickstart shows you how to use the Azure CLI to deploy a Linux virtual machine (VM) in Azure. Use the Azure CLI to create and manage Azure resources from the command line or in scripts.

If you don't have an Azure subscription, create a Trial before you begin.

Launch Azure Local Shell

If you prefer to install and use the CLI locally, this quickstart requires Azure CLI version 2.0.30 or later. Run az --version to find the version. If you need to install or upgrade, see Install Azure CLI.

Note

Before you can use Azure CLI in Microsoft Azure operated by 21Vianet, please run az cloud set -n AzureChinaCloud first to change the cloud environment. If you want to switch back to Azure Public Cloud, run az cloud set -n AzureCloud again.

Log in to Azure using the CLI

To run commands in Azure by using the CLI, you need to sign in first. Sign in by using the az login command.

Create a resource group

A resource group is a container for related resources. You must place all resources in a resource group. Use the az group create command to create a resource group with the previously defined $MY_RESOURCE_GROUP_NAME and $REGION parameters.

export RANDOM_ID="$(openssl rand -hex 3)"
export MY_RESOURCE_GROUP_NAME="myVMResourceGroup$RANDOM_ID"
export REGION=chinanorth2
az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION

Results:

{
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMResourceGroup",
  "location": "chinanorth2",
  "managedBy": null,
  "name": "myVMResourceGroup",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

Create the virtual machine

To create a VM in this resource group, use the vm create command.

The following example creates a VM and adds a user account. The --generate-ssh-keys parameter causes the CLI to look for an available SSH key in ~/.ssh. If it finds one, it uses that key. If not, it generates and stores a key in ~/.ssh. The --public-ip-sku Standard parameter ensures that the machine is accessible through a public IP address. Finally, it deploys the latest Ubuntu 22.04 image.

Configure all other values by using environment variables.

export MY_VM_NAME="myVM$RANDOM_ID"
export MY_USERNAME=azureuser
export MY_VM_IMAGE="Canonical:0001-com-ubuntu-minimal-jammy:minimal-22_04-lts-gen2:latest"
az vm create \
    --resource-group $MY_RESOURCE_GROUP_NAME \
    --name $MY_VM_NAME \
    --image $MY_VM_IMAGE \
    --admin-username $MY_USERNAME \
    --assign-identity \
    --generate-ssh-keys \
    --public-ip-sku Standard

It takes a few minutes to create the VM and supporting resources. The following example output shows the VM create operation was successful.

Results:

{
  "fqdns": "",
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM",
  "location": "chinanorth2",
  "macAddress": "00-0D-3A-10-4F-70",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.4",
  "publicIpAddress": "52.147.208.85",
  "resourceGroup": "myVMResourceGroup",
  "zones": ""
}

Enable Azure AD Authentication for a Linux virtual machine in Azure

The following code example deploys a Linux VM and then installs the extension to enable Azure AD Authentication for a Linux VM. VM extensions are small applications that provide post-deployment configuration and automation tasks on Azure virtual machines.

az vm extension set \
    --publisher Microsoft.Azure.ActiveDirectory \
    --name AADSSHLoginForLinux \
    --resource-group $MY_RESOURCE_GROUP_NAME \
    --vm-name $MY_VM_NAME

Store IP address of VM to use with SSH

Run the following command to store the IP address of the VM as an environment variable:

export IP_ADDRESS=$(az vm show --show-details --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_VM_NAME --query publicIps --output tsv)

SSH into the VM

You can now SSH into the VM by running the output of the following command in your ssh client of choice:

ssh -o StrictHostKeyChecking=no $MY_USERNAME@$IP_ADDRESS