配合使用 VMAccess 扩展和 Azure CLI 2.0 管理管理用户、SSH,并检查或修复 Linux VM 上的磁盘

Linux VM 上的磁盘显示错误。 不知道怎样重置 Linux VM 的根密码,或者不小心删除了 SSH 私钥。 如果在数据中心的时代发生这种情况,则需要开车到那里,并打开 KVM 访问服务器控制台。 请将 Azure VMAccess 扩展想像成该 KVM 交换机,它允许访问控制台以重置 Linux 访问或执行磁盘级维护。

本文说明如何使用 Azure VMAccess 扩展来检查或修复磁盘、重置用户访问权限、管理管理性用户帐户,或更新 Linux 上的 SSH 配置。 也可以使用 Azure CLI 1.0 执行这些步骤。

使用 VMAccess 扩展的方法

可通过两种方法在 Linux VM 上使用 VMAccess 扩展:

下面的示例使用 az vm user 命令。 若要执行这些步骤,需要安装最新的 Azure CLI 2.0,并使用 az login 登录到 Azure 帐户。

Note

在 Azure 中国区使用 Azure CLI 2.0 之前,请先运行 az cloud set -n AzureChinaCloud 来改变云环境。如果想切回国际版 Azure,请再次运行 az cloud set -n AzureCloud

更新 SSH 密钥

以下示例更新名为 myVM 的 VM 上用户 azureuser 的 SSH 密钥:

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

注意:az vm user update 命令将新公钥文本附加到 VM 上管理员用户的 ~/.ssh/authorized_keys 文件。 此操作不会替换或删除任何现有的 SSH 密钥。 这不会删除在部署时设置的先前密钥或通过 VMAccess 扩展进行的后续更新。

重置密码

以下示例重置名为 myVM 的 VM 上用户 azureuser 的密码:

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

重启 SSH

下面的示例将在名为 myVM 的 VM 上重启 SSH 守护程序,并将 SSH 配置重置为默认值:

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

创建管理员/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

使用 JSON 文件和 VMAccess 扩展

以下示例使用原始 JSON 文件。 然后使用 az vm extension set 调用 JSON 文件。 也可以从 Azure 模板调用这些 JSON 文件。

重置用户访问权限

如果已失去 Linux VM 的 root 访问权限,可以启动 VMAccess 脚本更新用户的 SSH 密钥或密码。

若要更新用户的 SSH 公钥,请创建名为 update_ssh_key.json 的文件并添加以下格式的设置。 用自己的值替换 usernamessh_key 参数:

{
  "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.4 \
  --protected-settings update_ssh_key.json

若要重置用户密码,请创建名为 reset_user_password.json 的文件并添加以下格式的设置。 用自己的值替换 usernamepassword 参数:

{
  "username":"azureuser",
  "password":"myNewPassword" 
}

结合以下参数执行 VMAccess 脚本:

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

重启 SSH

若要重新启动 SSH 守护程序并将 SSH 配置重置为默认值,请创建名为 reset_sshd.json 的文件。 添加以下内容:

{
  "reset_ssh": true
}

结合以下参数执行 VMAccess 脚本:

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

管理管理用户

若要创建具有 sudo 权限且使用 SSH 密钥进行身份验证的用户,请创建名为 create_new_user.json 的文件并添加以下格式的设置。 用你自己的值替换 usernamessh_key 参数的值。 丢失或忘记当前凭据时,此方法有助于重新获取对 VM 的访问权限。 作为最佳做法,应限制具有 sudo 权限的帐户。

{
  "username":"myNewUser",
  "ssh_key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCZ3S7gGp3rcbKmG2Y4vGZFMuMZCwoUzZNG1vHY7P2XV2x9FfAhy8iGD+lF8UdjFX3t5ebMm6BnnMh8fHwkTRdOt3LDQq8o8ElTBrZaKPxZN2thMZnODs5Hlemb2UX0oRIGRcvWqsd4oJmxsXa/Si98Wa6RHWbc9QZhw80KAcOVhmndZAZAGR+Wq6yslNo5TMOr1/ZyQAook5C4FtcSGn3Y+WczaoGWIxG4ZaWk128g79VIeJcIQqOjPodHvQAhll7qDlItVvBfMOben3GyhYTm7k4YwlEdkONm4yV/UIW0la1rmyztSBQIm9sZmSq44XXgjVmDHNF8UfCZ1ToE4r2SdwTmZv00T2i5faeYnHzxiLPA3Enub7iUo5IdwFArnqad7MO1SY1kLemhX9eFjLWN4mJe56Fu4NiWJkR9APSZQrYeKaqru4KUC68QpVasNJHbuxPSf/PcjF3cjO1+X+4x6L1H5HTPuqUkyZGgDO4ynUHbko4dhlanALcriF7tIfQR9i2r2xOyv5gxJEW/zztGqWma/d4rBoPjnf6tO7rLFHXMt/DVTkAfn5woYtLDwkn5FMyvThRmex3BDf0gujoI1y6cOWLe9Y5geNX0oj+MXg/W0cXAtzSFocstV1PoVqy883hNoeQZ3mIGB3Q0rIUm5d9MA2bMMt31m1g3Sin6EQ== myNewUser@myVM",
  "password":"myNewUserPassword"
}

结合以下参数执行 VMAccess 脚本:

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

若要删除用户,请创建名为 delete_user.json 的文件并添加以下内容。 用自己的值替换 remove_user 参数:

{
  "remove_user":"myNewUser"
}

结合以下参数执行 VMAccess 脚本:

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

检查或修复磁盘

使用 VMAccess 还可以检查并修复添加到 Linux VM 的磁盘。

若要检查并修复磁盘,请创建名为 disk_check_repair.json 的文件并添加以下格式的设置。 用自己的值替换 repair_disk 的名称:

{
  "check_disk": "true",
  "repair_disk": "true, mydiskname"
}

结合以下参数执行 VMAccess 脚本:

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

后续步骤

使用 Azure VMAccess 扩展更新 Linux 是一种对正在运行的 Linux VM 进行更改的方法。 也可以使用 cloud-init 等工具和 Azure Resource Manager 在 Linux VM 启动时对其进行修改。

适用于 Linux 的虚拟机扩展和功能

使用 Linux VM 扩展创作 Azure Resource Manager 模板

在创建期间使用 cloud-init 自定义 Linux VM