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. The Azure CLI is used to create and manage Azure resources via either the command line or scripts.
If you don't have an Azure subscription, create a free account before you begin.
Launch Azure Cloud Shell
The Azure Cloud Shell is a free interactive shell that you can use to run the steps in this article. It has common Azure tools preinstalled and configured to use with your account.
To open the Cloud Shell, just select Try it from the upper right corner of a code block. You can also open Cloud Shell in a separate browser tab by going to https://shell.azure.com/bash. Select Copy to copy the blocks of code, paste it into the Cloud Shell, and select Enter to run it.
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.
Define environment variables
The first step is to define the environment variables. Environment variables are commonly used in Linux to centralize configuration data to improve consistency and maintainability of the system. Create the following environment variables to specify the names of resources that you create later in this tutorial:
export RANDOM_ID="$(openssl rand -hex 3)"
export MY_RESOURCE_GROUP_NAME="myVMResourceGroup$RANDOM_ID"
export REGION=EastUS
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"
Log in to Azure using the CLI
In order to run commands in Azure using the CLI, you need to log in first. Log in using the az login
command.
Create a resource group
A resource group is a container for related resources. All resources must be placed in a resource group. The az group create command creates a resource group with the previously defined $MY_RESOURCE_GROUP_NAME and $REGION parameters.
az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION
Results:
{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myVMResourceGroup",
"location": "eastus",
"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 one is found, that key is used. If not, one is generated and stored in ~/.ssh
. The --public-ip-sku Standard
parameter ensures that the machine is accessible via a public IP address. Finally, we deploy the latest Ubuntu 22.04
image.
All other values are configured using environment variables.
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": "eastus",
"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 Login for a Linux virtual machine in Azure
The following code example deploys a Linux VM and then installs the extension to enable an Azure AD Login 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 in order to 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
Next Steps
Feedback
https://aka.ms/ContentUserFeedback.
Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see:Submit and view feedback for