適用於 Linux 的 VM 存取擴充功能

警告

本文參考 CentOS,這是接近結束生命週期 (EOL) 狀態的 Linux 發行版本。 請據以考慮您的使用和規劃。 如需詳細資訊,請參閱 CentOS 生命週期結束指引

VMAccess 延伸模組可用來管理系統管理用戶、設定 SSH,以及檢查或修復 Azure Linux 虛擬機器上的磁碟。 該延伸模組可以與 Azure Resource Manager 範本整合。 您也可以使用 Azure CLI、Azure PowerShell、Azure 入口網站及 Azure 虛擬機器 REST API 來叫用它。

本文說明如何透過 Azure Resource Manager 範本,從 Azure CLI 執行 VMAccess 延伸模組。 本文也提供適用於 Linux 系統的疑難排解步驟。

注意

如果您在安裝 Microsoft Entra 登入擴充功能之後,使用 VMAccess 擴充功能重設 VM 的密碼、重新執行 Microsoft Entra 登入擴充功能,以便為您的 VM 重新啟用 Microsoft Entra 登入。

必要條件

支援的 Linux 發行版本

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+
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 的設計目的是為了在遺失存取權的情況下重新取得 VM 的存取權。 根據此原則,它會將 sudo 權限授與用戶名稱欄位中所指定的帳戶。 如果您不希望使用者取得 sudo 權限,請登入 VM 並使用內建工具 (例如 usermod、chage 等) 來管理無特殊權限的使用者。
  • 您只能將一個版本的延伸模組套用至 VM。 若要執行第二個動作,請使用新的設定來更新現有的延伸模組。
  • 在使用者更新期間,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
    } 
  }
}

屬性值

名稱 值 / 範例 資料類型
apiVersion 2023-09-01 date
publisher Microsoft.OSTCExtensions string
type VMAccessForLinux string
typeHandlerVersion 1.5 int

設定屬性值

名稱 資料類型 描述
check_disk boolean 是否要檢查磁碟 (選擇性)。 在 check_diskrepair_disk 之間,只有一個可以設定為 true。
repair_disk boolean 是否要檢查磁碟 (選擇性)。 在 check_diskrepair_disk 之間,只有一個可以設定為 true。
disk_name string 要修復的磁碟名稱 (repair_disk 為 true 時需要)。
username string 要管理的使用者名稱 (使用者帳戶上所有動作的必要項目)。
password string 要為使用者帳戶設定的密碼。
ssh_key string 要為使用者帳戶新增的 SSH 公開金鑰。 SSH 金鑰可以是 ssh-rsassh-ed25519.pem 格式。
reset_ssh boolean 是否要重設 SSH。 如果 true,它會將 sshd_config 檔案取代為對應至該散發版本預設 SSH 設定的內部資源檔。
remove_user string 要移除的使用者名稱。 無法與 reset_sshrestore_backup_sshpassword 搭配使用。
到期 string 帳戶的到期日,格式為 yyyy-mm-dd。 預設為永不。
remove_prior_keys boolean 新增新的 SSH 金鑰時,是否要移除舊的 SSH 金鑰。 必須與 ssh_key 搭配使用。
restore_backup_ssh boolean 是否要還原原始備份sshd_config。

範本部署

您可以使用 Azure Resource Manager (ARM) 範本部署 Azure VM 延伸模組。 上一節詳述的 JSON 架構可在 ARM 範本中使用,在範本部署期間執行 VMAccess 延伸模組。 您可以在 GitHub 上找到包含 VMAccess 延伸模組的範例範本。

虛擬機器擴充功能的 JSON 組態必須在內嵌在範本的虛擬機器資源片段,具體來說,就是虛擬機器範本的 "resources": [] 物件,而若是虛擬機器擴展集,則會在 "virtualMachineProfile":"extensionProfile":{"extensions" :[] 物件下。

Azure CLI 部署

使用 Azure CLI VM 使用者命令

az vm user 底下的下列 CLI 命令會使用 VMAccess 延伸模組。 若要使用這些命令,您需要安裝最新的 Azure CLI,並且使用 az login 來登入 Azure 帳戶。

更新 SSH 金鑰

下列範例會更新名為 myVM 的 VM 上使用者 azureUser 的 SSH 金鑰:

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

注意

若為 VM 上的系統管理使用者,az vm user update 命令會將新的公用金鑰文字附加至 ~/.ssh/authorized_keys 檔案。 此命令並非取代或移除任何現有的 SSH 金鑰。 此命令不會移除先前在部署期間所設定的金鑰,也不會移除 VMAccess 延伸模組使用的後續更新。

重設密碼

下列範例會重設名為 myVM 的 VM 上使用者 azureUser 的密碼:

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

重新啟動 SSH

下列範例會重新啟動 SSH 精靈,並將 SSH 組態重設成名為 myVM 的 VM 上之預設值:

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

注意

az vm user reset-ssh命令會將 sshd_config 檔案取代為內部資源目錄中的預設設定檔。 此命令不會還原在虛擬機器上找到的原始 SSH 設定。

建立系統管理/sudo 使用者

下列範例會建立名為 myNewUser 且具有 sudo 權限的使用者。 此帳戶會使用 SSH 金鑰在名為 myVM 的 VM 上進行驗證。 此方法協助您在遺失或忘記目前的認證時能夠重新取得 VM 的存取權。 最佳做法是限制具有 sudo 權限的帳戶。

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

刪除使用者

下列範例會刪除名為 myVM 之 VM 上名為 myNewUser 的使用者:

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

使用 Azure CLI VM/VMSS 延伸模組命令

您也可以使用 az vm extension setaz 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"}'

--settings--protected-settings 參數也接受 JSON 檔案路徑。 例如,若要更新使用者的 SSH 公開金鑰,請建立名為 update_ssh_key.json 的 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 延伸模組部署到現有的虛擬機器或虛擬機器擴展集。 您可以執行下列命令,將延伸模組部署至 VM:

$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 延伸模組記錄只會存在於 VM 本機上,而且在進行疑難排解時最能提供資訊。

Location 描述
/var/log/waagent.log 包含來自 Linux 代理程式的記錄,並在延伸模組更新發生時顯示。 我們可以檢查它以確保延伸模組已執行。
/var/log/azure/Microsoft.OSTCExtensions.VMAccessForLinux/* VMAccess 延伸模組會產生記錄,您可以在這裡找到。 目錄包含 CommandExecution.log,您可以在其中找到每個命令及其結果,以及 extension.log,其中包含每個執行的個別記錄。
/var/lib/waagent/Microsoft.OSTCExtensions.VMAccessForLinux-<最新版本>/config/* VMAccess VM 延伸模組的設定和二進位檔。

您也可以執行下列命令,以擷取 VMAccess 延伸模組的執行狀態,以及指定 VM 上的其他延伸模組:

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

如需更多協助,您可以在 Azure 社群支援連絡 Azure 專家。 或者,您可以提出 Azure 支援事件。 前往 Azure 支援,然後選取 [取得支援]。 如需 Azure 支援的詳細資訊,請閱讀 Azure 支援方案常見問題集

下一步

若要檢視程式碼、目前版本及更多文件,請參閱 VMAccess Linux - GitHub