你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用“运行命令”操作在 Linux VM 中运行脚本

适用于:✔️ Linux VM ✔️ 灵活规模集

“运行命令”功能使用虚拟机 (VM) 代理在 Azure Linux VM 中运行 shell 脚本。 可以使用这些脚本进行常规计算机或应用程序管理。 它们可以帮助你快速诊断和修正 VM 访问与网络问题,使 VM 恢复正常状态。

优点

可通过多种方式访问虚拟机。 “运行命令”可以使用 VM 代理在虚拟机上以远程方式运行脚本。 对于 Linux VM,可以通过 Azure 门户、REST APIAzure CLI 使用“运行命令”。

在需要在虚拟机中运行脚本的所有方案中,此功能都很有用。 它可以用来对由于网络或管理用户配置不正确而没有打开 RDP 或 SSH 端口的虚拟机进行故障排除和修正,是具有此用途的少数方法之一。

限制

使用“运行命令”时存在以下限制:

  • 输出限制为最后的 4,096 个字节。
  • 运行脚本的最短时间大约为 20 秒。
  • 在 Linux 上,脚本默认情况下以提升用户的身份运行。
  • 一次只能运行一个脚本。
  • 不支持提示输入信息(交互模式)的脚本。
  • 无法取消正在运行的脚本。
  • 脚本最多可以运行 90 分钟。 90 分钟后脚本将会超时。
  • 需要从 VM 建立出站连接才能返回脚本的结果。

注意

若要正常工作,“运行命令”需要连接(通过端口 443)到 Azure 公共 IP 地址。 如果扩展无法访问这些终结点,则脚本可能会成功运行,但不会返回结果。 如果要阻止虚拟机上的流量,可以使用服务标记以通过 AzureCloud 标记允许流量发往 Azure 公共 IP 地址。

可用的命令

下表显示了可用于 Linux VM 的命令的列表。 可以使用 RunShellScript 命令运行所需的任何自定义脚本。 使用 Azure CLI 或 PowerShell 运行命令时,为 --command-id-CommandId 参数提供的值必须是下面列出的值之一。 如果指定的值不是可用的命令,将会收到以下错误:

The entity was not found in this Azure location
名称 说明
RunShellScript 运行 Linux shell 脚本。
ifconfig 获取所有网络接口的配置。

Azure CLI

以下示例使用 az vm run-command 命令在 Azure Linux VM 上运行 shell 脚本。

az vm run-command invoke -g myResourceGroup -n myVm --command-id RunShellScript --scripts "apt-get update && apt-get install -y nginx"

注意

若要以另一个用户的身份运行命令,请输入 sudo -u 以指定用户帐户。

Azure 门户

转到 Azure 门户中的 VM,然后在左侧菜单中的“操作”下选择“运行命令”。 你将看到可以在 VM 上运行的可用命令的列表。

List of commands

选择要运行的命令。 某些命令可能有可选或必需的输入参数。 对于这些命令,参数将呈现为文本字段,你可以在其中提供输入值。 对于每个命令,可以通过展开“查看脚本”来查看所运行的脚本。 RunShellScript 不同于其他命令,因为它允许你提供自己的自定义脚本。

注意

内置命令不可编辑。

选择命令之后,选择“运行”以运行脚本。 脚本完成之后,它会在输出窗口中返回输出和任何错误。 下面的屏幕截图显示了运行 ifconfig 命令时的示例输出。

Run command script output

PowerShell

以下示例使用 Invoke-AzVMRunCommand cmdlet 在 Azure VM 上运行 PowerShell 脚本。 该 cmdlet 需要 -ScriptPath 参数中引用的脚本位于运行该 cmdlet 的位置本地。

Invoke-AzVMRunCommand -ResourceGroupName '<myResourceGroup>' -Name '<myVMName>' -CommandId 'RunShellScript' -ScriptPath '<pathToScript>' -Parameter @{"arg1" = "var1";"arg2" = "var2"}

限制对“运行命令”的访问

列出“运行命令”或显示某个命令的详细信息需要 Microsoft.Compute/locations/runCommands/read 权限。 内置读者角色和更高级别具有此权限。

运行命令需要 Microsoft.Compute/virtualMachines/runCommand/action 权限。 虚拟机参与者角色和更高级别具有此权限。

若要使用“运行命令”,可以使用内置角色之一,也可以创建一个自定义角色

后续步骤

若要了解以远程方式在 VM 中运行脚本和命令的其他方式,请参阅在 Linux VM 中运行脚本