使用 Microsoft Entra ID 和 OpenSSH 登入 Azure 中的 Linux 虛擬機器
若要改善 Azure Linux 虛擬機 (VM) 或已啟用 Azure Arc 的 Linux 伺服器的安全性,您可以與 Microsoft Entra 驗證整合。 您現在可以使用 Microsoft Entra ID 做為核心驗證平台和憑證授權單位,利用 Microsoft Entra ID 和 OpenSSH 憑證型驗證透過 SSH 連線到 Linux VM。 這項功能可讓組織使用 Azure 角色型存取控制 (RBAC) 和條件式存取原則來管理對 VM 的存取。
本文說明如何建立和設定 Linux VM,並使用 OpenSSH 憑證型驗證透過 Microsoft Entra ID 進行登入。
搭配 OpenSSH 憑證型驗證使用 Microsoft Entra ID 登入 Azure 中的 Linux VM 有許多安全性優點。 其中包含:
- 使用您的 Microsoft Entra 認證登入 Azure Linux VM。
- 取得 SSH 金鑰型驗證,而不需要將 SSH 金鑰散發給使用者,或在您部署的任何 Azure Linux VM 上佈建 SSH 公開金鑰。 相較於必須擔心過時 SSH 公開金鑰的蔓延可能導致未經授權的存取,這項體驗簡單得多。
- 減少對本機系統管理員帳戶的依賴、認證遭竊和弱式認證。
- 透過 Microsoft Entra ID 配置密碼複雜性和密碼存留期政策,來協助保護 Linux VM。
- 透過 RBAC,指定誰能夠以一般使用者身分或系統管理員權限登入 VM。 當使用者加入您的團隊時,您可以更新 VM 的 Azure RBAC 原則來授與適當的存取權。 當員工離開您的組織時,其使用者帳戶會從 Microsoft Entra ID 中停用或移除,且他們將無法再存取您的資源。
- 使用條件式存取,將原則設定為要求多重要素驗證,以及要求您的用戶端裝置必須是受控裝置 (例如:符合規範或已使用 Microsoft Entra 混合式聯結的裝置),才能透過 SSH 連線到 Linux VM。
- 使用 Azure 部署和稽核原則來要求對 Linux VM 進行 Microsoft Entra 登入,並標記未核准的本機帳戶。
使用 Microsoft Entra ID 登入 Linux 虛擬機的功能適用於使用 Active Directory 同盟服務的客戶。
支援的 Linux 發行版本和 Azure 區域
支援區域中的部署目前支援下列 Linux 發行版本:
分配 | 版本 |
---|---|
AlmaLinux | AlmaLinux 8、AlmaLinux 9 |
Azure Linux (先前稱為 Common Base Linux Mariner) | CBL-Mariner 2.0、Azure Linux 3.0 |
Debian | Debian 9、Debian 10、Debian 11、Debian 12 |
openSUSE | openSUSE Leap 42.3、openSUSE Leap 15.1 至 15.5、openSUSE Leap 15.6+ |
Oracle | Oracle Linux 8、Oracle Linux 9 |
RedHat Enterprise Linux (RHEL) | RHEL 7.4 至 RHEL 7.9、RHEL 8.3+、RHEL 9.0+ |
Rocky | Rocky 8、Rocky 9 |
SUSE Linux Enterprise Server (SLES) | SLES 12、SLES 15.1 至 15.5、SLES 15.6+ |
Ubuntu | Ubuntu 16.04 至 Ubuntu 24.04 |
注意
SUSE 對與舊版不相容的 15.6 版進行了重大變更。 由於 Microsoft Entra 登入 VM 擴充功能一律會安裝最新的套件,因此不適用於較舊的 SUSE 版本。 您可以從舊版 SUSE 版本的 packages.microsoft.com 安裝 aadsshlogin 套件。 新增存放庫之後,可以使用下列命令手動安裝:sudo zypper install aadsshlogin=1.0.027980001
。
以下是這項功能目前支援的 Azure 區域:
- Azure 全域
- Azure Government
- 由 21Vianet 營運的 Microsoft Azure
不支援在 Azure Kubernetes Service (AKS) 叢集上使用 Azure CLI 的 SSH 延伸模組。 如需詳細資訊,請參閱 AKS 的支援原則。
如果您選擇在本機上安裝和使用 Azure CLI,必須是 Azure 2.22.1 版或更新版本。 執行 az --version
以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI 模組。
注意
此功能也適用於已啟用 Azure Arc 的伺服器。
符合使用 OpenSSH 憑證式驗證登入 Microsoft Entra ID 的需求
若要為 Azure 中的 Linux VM 啟用使用 SSH 憑證型驗證的 Microsoft Entra 登入,請確定符合下列網路、虛擬機器和用戶端 (SSH 用戶端) 需求。
網路
VM 網路設定必須允許透過 TCP 通訊埠 443 對下列端點進行輸出存取。
Azure 全域:
-
https://packages.microsoft.com
:適用於套件安裝和升級。 -
http://169.254.169.254
:Azure Instance Metadata Service 端點。 -
https://login.microsoftonline.com
:適用於 PAM 型 (插入式驗證模組) 的驗證流程。 -
https://pas.windows.net
:適用於 Azure RBAC 流程。
Azure Government:
-
https://packages.microsoft.com
:適用於套件安裝和升級。 -
http://169.254.169.254
:Azure Instance Metadata Service 端點。 -
https://login.microsoftonline.us
:適用於 PAM 型驗證流程。 -
https://pasff.usgovcloudapi.net
:適用於 Azure RBAC 流程。
由 21Vianet 營運的 Microsoft Azure:
-
https://packages.microsoft.com
:適用於套件安裝和升級。 -
http://169.254.169.254
:Azure Instance Metadata Service 端點。 -
https://login.chinacloudapi.cn
:適用於 PAM 型驗證流程。 -
https://pas.chinacloudapi.cn
:適用於 Azure RBAC 流程。
虛擬機器
確定您的 VM 已設定下列功能:
- 由系統指派的管理的身分識別。 當您使用 Azure 入口網站建立 VM 並選取 Microsoft Entra 登入選項時,此選項就會自動選取。 您也可以使用 Azure CLI,在新的或現有的 VM 上啟用系統指派的受控識別。
-
aadsshlogin
和aadsshlogin-selinux
(如果適用)。 這些套件會與 AADSSHLoginForLinux VM 延伸模組一起安裝。 當您使用 Azure 入口網站或 Azure CLI 建立 VM 並啟用 Microsoft Entra 登入 ([管理] 索引標籤) 時,就會安裝此延伸模組。
客戶
確定您的用戶端符合下列需求:
SSH 用戶端支援 OpenSSH 型憑證以進行驗證。 您可以搭配 OpenSSH (包含在 Windows 10 1803 版或更高版本中) 使用 Azure CLI (2.21.1 或更高版本) 或是使用 Azure Cloud Shell 來符合此需求。
Azure CLI 的 SSH 延伸模組。 您可以透過使用
az extension add --name ssh
,來安裝這個延伸模組。 使用 Azure Cloud Shell 時,由於已預先安裝此延伸模組,因此不需要進行安裝。如果您使用 Azure CLI 以外的任何其他 SSH 用戶端或支援 OpenSSH 憑證的 Azure Cloud Shell,您仍需要搭配 SSH 延伸模組使用 Azure CLI 來擷取暫時性 SSH 憑證和選擇性的設定檔。 然後將設定檔與 SSH 用戶端搭配使用。
用戶端的 TCP 連線可以連接到 VM 的公共或私人 IP 位址。 (ProxyCommand 或 SSH 轉送至具有連線能力的機器也適用。)
重要
以 PuTTy 為基礎的 SSH 用戶端現在支援 OpenSSH 憑證,可以使用 Microsoft Entra OpenSSH 憑證型驗證進行登入。
為 Azure 中的 Linux VM 啟用 Microsoft Entra 登入
若要在 Azure 中針對 Linux VM 使用 Microsoft Entra 登入,您必須先為 Linux VM 啟用 Microsoft Entra 登入選項。 然後為已獲授權登入 VM 的使用者設定 Azure 角色指派。 最後,您會使用支援 OpenSSH 的 SSH 用戶端,例如 Azure CLI 或 Azure Cloud Shell,透過 SSH 連線到您的 Linux VM。
有兩種方式可用來為 Linux VM 啟用 Microsoft Entra 登入:
- 建立 Linux VM 時的 Azure 入口網站體驗
- 當您建立 Linux VM 或使用現有的 VM 時,Azure Cloud Shell 的使用體驗
Azure 入口網站
您可以使用 Azure 入口網站為任何支援的 Linux 發行版本啟用 Microsoft Entra 登入。
例如,若要透過 Microsoft Entra 登入在 Azure 中建立 Ubuntu Server 18.04 Long Term Support (LTS) VM:
- 使用具有建立 VM 存取權的帳戶登入 Azure 入口網站,然後選取 [+ 建立資源]。
- 請在 [熱門] 檢視中,找到 [Ubuntu Server 18.04 LTS],然後選取 [建立]。
- 在「管理」標籤頁上:
- 勾選 [使用 Microsoft Entra ID 登入] 核取方塊。
- 確定已選取 [系統指派的受控識別] 核取方塊。
- 完成建立虛擬機器的其餘體驗。 您必須使用使用者名稱和密碼或 SSH 公開金鑰建立系統管理員帳戶。
Azure Cloud Shell
Azure Cloud Shell 是免費的互動式 Shell,可讓您用來執行本文中的步驟。 Cloud Shell 中已預先安裝和設定共用 Azure 工具,以便您搭配自己的帳戶使用。 只要選取 [複製] 按鈕即可複製程式碼、貼到 Cloud Shell 中,然後選取 Enter 鍵即可加以執行。
以下有幾種開啟 Cloud Shell 的方式:
- 在程式碼區塊右上角選擇「試試看」。
- 在您的瀏覽器中開啟 Cloud Shell。
- 選取 Azure 入口網站右上角功能表中的 [Cloud Shell] 按鈕。
如果您選擇在本機安裝和使用 Azure CLI,本文會要求您使用 2.22.1 版或更新版本。 執行 az --version
以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI 模組。
- 執行 az group create 建立資源群組。
- 執行 az vm create 建立 VM。 在支援的區域中使用支援的發行版本。
- 使用 az vm extension set 安裝 Microsoft Entra login VM 延伸模組。
下列範例會部署 VM,然後安裝延伸模組,為 Linux VM 啟用 Microsoft Entra 登入。 VM 延伸模組是小型的應用程式,可在「Azure 虛擬機器」上提供部署後組態及自動化工作。 您可以視需要自訂範例來支援測試需求。
az group create --name AzureADLinuxVM --location southcentralus
az vm create \
--resource-group AzureADLinuxVM \
--name myVM \
--image Ubuntu2204 \
--assign-identity \
--admin-username azureuser \
--generate-ssh-keys
az vm extension set \
--publisher Microsoft.Azure.ActiveDirectory \
--name AADSSHLoginForLinux \
--resource-group AzureADLinuxVM \
--vm-name myVM
建立虛擬機器和支援資源需要幾分鐘的時間。
您可以在執行 VM 代理程式的現有 (支援的發行版本) Linux VM 上安裝 AADSSHLoginForLinux 延伸模組來啟用 Microsoft Entra 驗證。 如果將此延伸模組部署到先前建立的 VM,必須為 VM 至少配置 1 GB 的記憶體,否則安裝會失敗。
當在 VM 上成功安裝延伸模組時,provisioningState
的值 Succeeded
即會出現。 VM 必須有執行中的 VM 代理程式,才能安裝延伸模組。
為已啟用 Azure Arc 的 Linux 伺服器啟用Microsoft Entra 登入
您可以找到 已啟用 Azure Arc 之伺服器的 SSH 存取 相關詳細數據
設定 VM 的角色指派
您建立 VM 後,必須指派下列其中一個 Azure 角色,以判斷哪些人可以登入 VM。 若要指派這些角色,您必須擁有虛擬機器資料存取系統管理員角色,或任何包含 Microsoft.Authorization/roleAssignments/write
動作的角色,例如角色型存取控制系統管理員角色。 不過,如果您使用與虛擬機器資料存取管理員不同的角色,建議您新增條件來減少建立角色指派的授權。
- 虛擬機器系統管理員登入:獲指派此角色的使用者能夠以系統管理員權限登入 Azure 虛擬機器。
- 虛擬機器使用者登入:獲指派此角色的使用者能夠以一般使用者權限登入 Azure 虛擬機器。
若要允許使用者透過 SSH 登入 VM,您必須將虛擬機器系統管理員登入或虛擬機器使用者登入角色指派給包含 VM 及其相關聯虛擬網路、網路介面、公用 IP 位址或負載平衡器資源的資源群組。
獲指派 VM 擁有者或參與者角色的 Azure 使用者,並不會自動取得透過 SSH 對 VM 進行 Microsoft Entra 登入的權限。 這是為了在一組控制虛擬機器的人員與一組能夠存取虛擬機器的人員之間提供刻意 (且經過稽核) 的隔離。
有兩種方式可以設定 VM 的角色指派:
- Azure 入口網站體驗
- Azure Cloud Shell 體驗
注意
[虛擬機器系統管理員登入] 和 [虛擬機器使用者登入] 角色使用 dataActions
,並可在管理群組、訂閱、資源群組或資源範圍內對其進行指派。 建議您在管理群組、訂閱或資源群組層級指派角色,而不是在個別 VM 層級指派。 此做法可避免達到每個訂閱的 Azure 角色指派限制。
Azure 入口網站
若要為啟用 Microsoft Entra ID 的 Linux VM 設定角色指派:
針對 [資源群組],選取包含 VM 及其相關聯虛擬網路、網路介面、公用 IP 位址或負載平衡器資源的資源群組。
選擇 [存取控制 (IAM)]。
選取 [新增]> [新增角色指派],開啟 [新增角色指派] 頁面。
指派下列角色。 如需詳細步驟,請參閱使用 Azure 入口網站指派 Azure 角色。
設定 值 角色 [虛擬機器系統管理員登入] 或 [虛擬機器使用者登入] 存取權指派對象為 使用者、群組、服務主體或受控識別
在片刻之後,安全性主體的角色即會被指派至所選範圍。
Azure Cloud Shell
下列範例會使用 az role assignment create 將 [虛擬機器系統管理員登入] 角色指派給您目前 Azure 使用者的 VM。 您可以使用 az account show 來取得目前 Azure 帳戶的使用者名稱,並使用 az vm show 將範圍設定為在上一個步驟中建立的 VM。
您也可以在資源群組或訂閱層級指派範圍。 一般的 Azure RBAC 繼承權限適用於此。
username=$(az account show --query user.name --output tsv)
rg=$(az group show --resource-group myResourceGroup --query id -o tsv)
az role assignment create \
--role "Virtual Machine Administrator Login" \
--assignee $username \
--scope $rg
注意
如果您的 Microsoft Entra 網域和登入使用者名稱網域不符,您必須以 --assignee-object-id
指定使用者帳戶的物件識別碼,而不只是針對 --assignee
指定使用者名稱。 您可以使用 az ad user list 取得使用者帳戶的物件識別碼。
如需如何使用 Azure RBAC 來管理 Azure 訂閱資源存取權的詳細資訊,請參閱指派 Azure 角色的步驟一文。
安裝適用於 Azure CLI 的 SSH 延伸模組
如果您使用 Azure Cloud Shell,則不需要其他設定,因為 Azure CLI 的最低必要版本和適用於 Azure CLI 的 SSH 延伸模組已包含在 Cloud Shell 環境中。
執行下列命令來新增適用於 Azure CLI 的 SSH 延伸模組:
az extension add --name ssh
延伸模組所需的最低版本為 0.1.4。 您可以使用下列命令,查看已安裝的版本:
az extension show --name ssh
強制執行條件式存取原則
您可以強制執行使用 Microsoft Entra 登入啟用的條件式存取原則,例如:
- 需要多因素驗證。
- 要求執行 SSH 用戶端的裝置必須是符合規範的或已混合加入 Microsoft Entra 的裝置。
- 在授權存取 Azure 中的 Linux VM 之前檢查風險。
出現在條件式存取原則中的應用程式稱為 Azure Linux VM 登入。
注意
在執行 SSH 用戶端的裝置上,條件式存取原則要求裝置達到合規性或具有 Microsoft Entra 混合式聯結的強制執行,僅適用於在 Windows 和 macOS 上執行的 Azure CLI。 在 Linux 或 Azure Cloud Shell 上使用 Azure CLI 時,不支援此功能。
遺漏應用程式
如果條件式存取缺少 Azure Linux VM 登入應用程式,請確保應用程式並未被保存於租用戶中:
- 以至少 雲端應用程式系統管理員 的身分登入 Microsoft Entra 系統管理中心。
- 瀏覽至 [身分識別]>[應用程式]>[企業應用程式]。
- 移除篩選條件以查看所有應用程式,並搜尋「虛擬機器」。 如果您看不到 Microsoft Azure Linux 虛擬機器登入,則租用戶缺少服務主體。
使用 Microsoft Entra 使用者帳戶透過 SSH 連線到 Linux VM 進行登入
使用 Azure CLI 登入
輸入 az login
。 此命令會開啟瀏覽器視窗,您可以在其中使用 Microsoft Entra 帳戶登入。
az login
然後輸入 az ssh vm
。 下列範例會自動解析 VM 的適當 IP 位址。
az ssh vm -n myVM -g AzureADLinuxVM
如果出現提示,請在登入頁面上輸入您的 Microsoft Entra 登入認證、執行多重要素驗證,以及 (或) 完成裝置檢查。 只有在 Azure CLI 工作階段尚未符合任何必要的條件式存取準則時,才會出現提示。 關閉瀏覽器視窗並返回 SSH 提示,系統會自動將您連線到 VM。
您現在已使用指派的角色權限 (例如 [VM 使用者] 或 [VM 系統管理員]) 登入 Linux 虛擬機器。 如果您的使用者帳戶獲指派 [虛擬機器系統管理員登入] 角色,您可以使用 sudo 執行需要根權限的命令。
使用 Azure Cloud Shell 登入
您可以使用 Azure Cloud Shell 連線到 VM,而不需要在用戶端電腦本機上安裝任何項目。 選取 Azure 入口網站右上角的 Shell 圖示以啟動 Cloud Shell。
Cloud Shell 會自動連線到已登入使用者的會話。 現在需要再次執行 az login
,並完成互動式登入流程:
az login
然後,您可以使用一般 az ssh vm
命令,利用 VM 的名稱和資源群組或 IP 位址進行連線:
az ssh vm -n myVM -g AzureADLinuxVM
注意
使用 Azure Cloud Shell 時,不支援要求裝置符合規範或加入 Microsoft Entra 混合式聯結的條件式存取原則強制執行。
使用 Microsoft Entra 服務主體透過 SSH 連線到 Linux VM 進行登入
Azure CLI 支援使用服務主體進行驗證,而不是透過使用者帳戶驗證。 由於服務主體未繫結至任何特定使用者,因此客戶能夠使用服務主體透過 SSH 連線到 VM,以支援其可能遇到的任何自動化案例。 服務主體必須已指派 [VM 系統管理員] 或 [VM 使用者] 權限。 在訂閱或資源群組層級指派權限。
下列範例會在資源群組層級將 [VM 系統管理員] 權限指派給服務主體。 請替換服務主體物件識別碼、訂閱識別碼和資源群組名稱的佔位符。
az role assignment create \
--role "Virtual Machine Administrator Login" \
--assignee-object-id <service-principal-objectid> \
--assignee-principal-type ServicePrincipal \
--scope "/subscriptions/<subscription-id>/resourceGroups/<resourcegroup-name>"
使用下列範例,利用服務主體向 Azure CLI 進行驗證。 如需詳細資訊,請參閱使用服務主體登入 Azure CLI一文。
az login --service-principal -u <sp-app-id> -p <password-or-cert> --tenant <tenant-id>
使用服務主體驗證完成之後,請使用一般 Azure CLI SSH 命令連線到 VM:
az ssh vm -n myVM -g AzureADLinuxVM
匯出 SSH 設定來與支援 OpenSSH 的 SSH 用戶端搭配使用
透過 Microsoft Entra ID 登入 Azure Linux VM 支援匯出 OpenSSH 憑證和設定的功能。 這表示您可以使用任何支援 OpenSSH 型憑證的 SSH 用戶端,透過 Microsoft Entra ID 登入。 下列範例會匯出指派給 VM 的所有 IP 位址設定:
az ssh config --file ~/.ssh/config -n myVM -g AzureADLinuxVM
您也可以只指定 IP 位址來匯出設定。 在以下範例中,將 IP 位址取代為您的 VM 的公用或私有 IP 位址。 (您必須具備私人 IP 的連線能力。)輸入az ssh config -h
以取得此命令的說明。
az ssh config --file ~/.ssh/config --ip 10.11.123.456
然後,您可以透過一般 OpenSSH 使用方式來連線到 VM。 透過使用 OpenSSH 的任何 SSH 用戶端即可進行連線。
執行 sudo,使用 Microsoft Entra 登入
當獲指派 [VM 系統管理員] 角色的使用者成功透過 SSH 連線到 Linux VM 之後,將能夠執行 sudo,而沒有其他互動或驗證需求。 獲指派 [VM 使用者] 角色的使用者將無法執行 sudo。
連線到虛擬機器擴展集中的 VM
支援虛擬機器擴展集,但啟用和連線到虛擬機器擴展集 VM 的步驟稍有不同。
創建一個虛擬機器規模集或選擇一個已存在的。 為您的虛擬機器擴展集啟用系統指派的受控識別:
az vmss identity assign --name myVMSS --resource-group AzureADLinuxVM
在虛擬機器擴展集上安裝Microsoft Entra 延伸模組:
az vmss extension set --publisher Microsoft.Azure.ActiveDirectory --name AADSSHLoginForLinux --resource-group AzureADLinuxVM --vmss-name myVMSS
虛擬機器擴展集通常不會有公用 IP 位址。 您必須從可以連接到對方 Azure 虛擬網路的另一台機器進行連線。 此範例顯示如何使用虛擬機器規模設定中 VM 的私有 IP,從相同虛擬網路中的機器進行連線。
az ssh vm --ip 10.11.123.456
注意
您無法使用 --resource-group
和 --name
參數自動判斷虛擬機器規模設定 VM 的 IP 位址。
從上一個 (預覽) 版本移轉
如果您使用了以裝置程式碼流程為基礎的 Linux 舊版 Microsoft Entra 登入,請使用 Azure CLI 完成下列步驟:
將 VM 上的 AADLoginForLinux 延伸模組解除安裝:
az vm extension delete -g MyResourceGroup --vm-name MyVm -n AADLoginForLinux
注意
如果目前有任何登入 VM 的 Microsoft Entra 使用者,則延伸模組解除安裝可能會失敗。 請確認所有使用者先行登出。
在您的 VM 上啟用系統指派的受控識別:
az vm identity assign -g myResourceGroup -n myVm
在 VM 上安裝 AADSSHLoginForLinux 延伸模組:
az vm extension set \ --publisher Microsoft.Azure.ActiveDirectory \ --name AADSSHLoginForLinux \ --resource-group myResourceGroup \ --vm-name myVM
使用 Azure 原則確保符合標準並評估合規性
使用 Azure 原則來:
- 請確定已為新的和現有的 Linux 虛擬機器啟用 Microsoft Entra 登入。
- 在合規性儀表板上大規模評估環境的合規性。
您可以透過這項功能,使用許多等級的強制執行。 您可以在環境中標記未啟用 Microsoft Entra 登入之新的和現有的 Linux VM。 您也可以使用 Azure 原則,在未啟用 Microsoft Entra 登入的新 Linux VM 上部署Microsoft Entra 延伸模組,並將現有的 Linux VM 補救為相同的標準。
除了這些功能之外,您也可以使用 Azure 原則來偵測和標記在電腦上建立了未核准之本機帳戶的 Linux VM。 若要深入了解,請檢閱 Azure 原則。
對登入問題進行疑難排解
使用下列各節來修正您透過 Microsoft Entra 認證使用 SSH 時可能發生的常見錯誤。
無法從本機快取擷取權杖
如果您收到訊息,指出無法從本機快取擷取權杖,您必須再次執行 az login
,並執行互動式登入流程。 檢閱使用 Azure Cloud Shell 登入章節。
拒絕存取:未指派 Azure 角色
如果您在 SSH 提示中看到「未指派 Azure 角色」錯誤,請確認您已為 VM 設定 Azure RBAC 原則,而可為使用者授與 [虛擬機器管理員登入] 或 [虛擬機器使用者登入] 角色。 如果您遇到 Azure 角色指派的問題,請參閱針對 Azure RBAC 進行疑難排解一文。
刪除舊的延伸模組 (AADLoginForLinux) 時發生問題
如果解除安裝指令碼失敗,擴充功能可能會卡住在過渡狀態。 發生這種情況時,擴充功能在移除時可能會留下原本應該解除安裝的套件。 在此情況下,最好手動解除安裝舊的套件,然後嘗試執行 az vm extension delete
命令。
若要解除安裝舊套件:
- 以具有系統管理員權限的本機使用者身分登入。
- 確定沒有任何登入的 Microsoft Entra 使用者。 呼叫
who -u
命令,以查看已登入的使用者。 然後,針對先前命令報告的所有工作階段流程使用sudo kill <pid>
。 - 執行
sudo apt remove --purge aadlogin
(Ubuntu/Debian)、sudo yum remove aadlogin
(RHEL),或sudo zypper remove aadlogin
(openSUSE 或 SLES)。 - 如果命令失敗,請嘗試使用已停用指令碼的低階工具:
- 針對 Ubuntu/Debian,執行
sudo dpkg --purge aadlogin
。 如果仍因指令碼失敗,請刪除/var/lib/dpkg/info/aadlogin.prerm
檔案,然後再試一次。 - 針對其他所有項目,執行
rpm -e --noscripts aadogin
。
- 針對 Ubuntu/Debian,執行
- 針對套件
aadlogin-selinux
重複執行步驟 3-4。
延伸模組安裝錯誤
將 AADSSHLoginForLinux VM 延伸模組安裝到現有電腦可能會失敗,並出現下列其中一個已知的錯誤碼。
非零結束代碼 22
如果您收到結束代碼 22,AADSSHLoginForLinux VM 延伸模組的狀態會在入口網站中顯示為 [轉換中]。
發生此失敗的原因是需要系統指派的受控識別。
解決方案是:
- 將失敗的延伸模組解除安裝。
- 在 Azure VM 上啟用系統指派的受控識別。
- 再次執行延伸模組安裝命令。
非零結束代碼 23
如果您收到結束代碼 23,AADSSHLoginForLinux VM 延伸模組的狀態會在入口網站中顯示為 [轉換中]。
此失敗是由於仍安裝舊版 AADLoginForLinux VM 延伸模組所造成。
此解決方案是要從 VM 解除安裝舊版 AADLoginForLinux VM 延伸模組。 新 AADSSHLoginForLinux VM 延伸模組的狀態將在入口網站中變更為 [佈建成功]。
使用 HTTP Proxy 時安裝失敗
延伸模組需要 HTTP 連線才能安裝套件,並檢查系統身分識別是否存在。 它會在 walinuxagent.service
的內容中執行,而且需要變更,才能讓代理程式知道 Proxy 設定。 在目標機器上開啟 /lib/systemd/system/walinuxagent.service
檔案,並在 [Service]
之後新增下列這一行:
[Service]
Environment="http_proxy=http://proxy.example.com:80/"
Environment="https_proxy=http://proxy.example.com:80/"
Environment="no_proxy=169.254.169.254"
重新啟動代理程式 (sudo systemctl restart walinuxagent
)。 現在再試一次。
az ssh vm 命令失敗,並顯示 KeyError access_token
如果 az ssh vm
命令失敗,您會使用過期版本的 Azure CLI 用戶端。
此解決方案是要將 Azure CLI 用戶端升級為 2.21.0 版或更高版本。
已關閉 SSH 連線
當使用者透過 az login
成功登入後,透過 az ssh vm -ip <address>
或 az ssh vm --name <vm_name> -g <resource_group>
連線至 VM 可能會失敗,並顯示「<ip_address> 連接埠 22 已關閉連線。」
發生此錯誤的其中一個原因是使用者未指派給此 VM 範圍內的 [虛擬機器系統管理員登入] 或 [虛擬機器使用者登入] 角色。 在此情況下,解決方案是將使用者新增至此 VM 範圍內的其中一個 Azure RBAC 角色。
如果使用者處於必要的 Azure RBAC 角色中,但在 VM 上,系統指派的管理識別已被停用,也可能發生此錯誤。 在此情況下,請執行下列動作:
- 在 VM 上啟用系統指派的受控識別。
- 允許先將過幾分鐘的時間,再讓使用者嘗試透過
az ssh vm --ip <ip_address>
連線。
虛擬機器擴展集的連線問題
如果虛擬機器擴展集執行個體正在執行舊的模型,虛擬機器擴展集的 VM 連線可能會失敗。
將規模化設定實例升級為最新的模型可能會解決問題,特別是在安裝 Microsoft Entra 登入延伸模組後尚未進行升級的情況下。 升級一個執行個體會將標準規模集設定套用至個別執行個體。
sshd_config 中的 AllowGroups 或 DenyGroups 語句會導致 Microsoft Entra 使用者的第一次登入失敗
如果 sshd_config 包含 AllowGroups
或 DenyGroups
語句,則 Microsoft Entra 使用者的第一次登入會失敗。 如果該語句是在使用者已經成功登入之後才新增,則他們可以登入。
其中一個解決方案是從 AllowGroups
中移除 DenyGroups
和 語句。
另一個解決方案是將 AllowGroups
和 DenyGroups
移至 match user
的 區段。 請確定比對範本排除 Microsoft Entra 使用者。
嘗試從 Azure Shell 連線到 Linux Red Hat/Oracle 7.X VM 時,收到拒絕授權。
目標 VM 7.4 中的 OpenSSH 伺服器版本太舊。 版本與 OpenSSH 用戶端 8.8 版不相容。 如需詳細資訊,請參閱 RSA SHA256 憑證無法再運作。
因應措施:
- 在
"PubkeyAcceptedKeyTypes= +ssh-rsa-cert-v01@openssh.com"
命令中新增選項az ssh vm
。
az ssh vm -n myVM -g MyResourceGroup -- -A -o "PubkeyAcceptedKeyTypes= +ssh-rsa-cert-v01@openssh.com"
- 在
"PubkeyAcceptedKeyTypes= +ssh-rsa-cert-v01@openssh.com"
中新增選項/home/<user>/.ssh/config file
。
將 "PubkeyAcceptedKeyTypes +ssh-rsa-cert-v01@openssh.com"
新增至用戶端組態檔。
Host *
PubkeyAcceptedKeyTypes +ssh-rsa-cert-v01@openssh.com