﻿# 拯救 Azure Linux 虛擬機器大作戰：透過執行命令緊急修復問題

最近幫客戶在 Azure 雲端服務架設一台 Linux 主機，當所有服務設定完成後，請客戶登入接著進行後續設定調整。結果在開帳號給客戶的過程中，卻不小心把 `sudoers` 的格式寫壞，導致連我自己都無法 `sudo` 成管理者，整台機器完全無法管理，當場傻眼！本篇文章要來分享一個急救良藥，在 Azure 上管理 Linux VM 有絕招，任何錯誤的設定都可以輕鬆解決！

先來看看發生錯誤的畫面，我可以成功登入自己的帳號，但無法變身為 `root` 權限：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/ec3b30e9321a181d38eb-image_3157.png)

所有在 Azure 上執行的 Linux VM 都會安裝一個 VM 代理程式，這個代理程式會以最高權限身分執行著，所以我們可以透過 Azure 提供的 **執行命令 (Run command)** 功能，在 Linux VM 中執行任意指令碼，而且是以 `root` 身分執行。如此一來，我們就可以用來快速診斷和修復虛擬機器存取和網路問題，並使虛擬機器恢復正常狀態。

我後來找到 [使用執行命令在 Linux VM 中執行殼層指令碼](https://learn.microsoft.com/zh-tw/azure/virtual-machines/linux/run-command) 這篇文章，講解的十分清楚，以下我大概示範幾種執行方法。

1.  透過 Azure 入口網站操作  
    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/698cdc0739d4325f03d4-image_3158.png)  
    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/8590bcf0fb859b44e703-image_3159.png)

2.  透過 Azure CLI 進行操作  
      
    透過 [az vm run-command](https://learn.microsoft.com/cli/azure/vm/run-command?view=azure-cli-latest#az-vm-run-command-invoke) 命令，也可以做到相同的動作，執行任意命令。  
      
    
    ```bash
    az vm run-command invoke -g myResourceGroup -n myVm --command-id RunShellScript --scripts "sudo apt-get update && sudo apt-get install -y nginx"
    ```
    

  

**相關連結**

-   [在 Azure 上的 Linux VM 中執行殼層指令碼 | Microsoft Docs](https://learn.microsoft.com/zh-tw/azure/virtual-machines/linux/run-command)
-   [az vm run-command | Microsoft Docs](https://learn.microsoft.com/zh-tw/cli/azure/vm/run-command?view=azure-cli-latest#az-vm-run-command-invoke)
