使用 Microsoft Entra ID 和 OpenSSH 登入 Azure 中的 Linux 虛擬機器
若要在 Azure 中改善 Linux 虛擬機器 (VM) 的安全性,您可以整合 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 登入,並標記未核准的本機帳戶。
使用 Active Directory 同盟服務的客戶也可以使用 Microsoft Entra ID 登入 Linux VM。
支援的 Linux 發行版本和 Azure 區域
支援區域中的部署目前支援下列 Linux 發行版本:
發佈 | 版本 |
---|---|
Common Base Linux Mariner (CBL-Mariner) | CBL-Mariner 1、CBL-Mariner 2 |
AlmaLinux | AlmaLinux 8、AlmaLinux 9 |
Debian | Debian 9、Debian 10、Debian 11、Debian 12 |
openSUSE | openSUSE Leap 42.3、openSUSE Leap 15.1+ |
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+ |
Ubuntu | Ubuntu 16.04 至 Ubuntu 24.04 |
以下是這項功能目前支援的 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 是免費的互動式命令介面,可讓您用來執行本文中的步驟。 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 登入 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 和支援資源需要幾分鐘的時間。
您可以在執行 VM 代理程式的現有 (支援的發行版本) Linux VM 上安裝 AADSSHLoginForLinux 延伸項目來啟用 Microsoft Entra 驗證。 如果將此延伸項目部署到先前建立的 VM,必須為 VM 至少配置 1 GB 的記憶體,否則安裝會失敗。
在 VM 上成功安裝延伸項目時,會出現 Succeeded
的值 provisioningState
。 VM 必須有執行中的 VM 代理程式,才能安裝延伸項目。
設定 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 用戶端即可進行連線。
使用 Microsoft Entra 登入執行 sudo
當獲指派 [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 使用者的第一次登入會失敗。 如果該陳述式是在使用者已經成功登入之後才新增,則他們可以登入。
其中一個解決方案是從 sshd_config 中移除 AllowGroups
和 DenyGroups
陳述式。
另一個解決方案是將 AllowGroups
和 DenyGroups
移至 sshd_config 的 match user
區段。 請確定比對範本排除 Microsoft Entra 使用者。
嘗試從 Azure Shell 連線到 Linux Red Hat/Oracle 7.X VM 時,收到拒絕權限。
目標 VM 7.4 中的 OpenSSH 伺服器版本太舊。 版本與 OpenSSH 用戶端 8.8 版不相容。 如需詳細資訊,請參閱 RSA SHA256 憑證無法再運作。
因應措施:
- 在
az ssh vm
命令中新增選項"PubkeyAcceptedKeyTypes= +ssh-rsa-cert-v01@openssh.com"
。
az ssh vm -n myVM -g MyResourceGroup -- -A -o "PubkeyAcceptedKeyTypes= +ssh-rsa-cert-v01@openssh.com"
- 在
/home/<user>/.ssh/config file
中新增選項"PubkeyAcceptedKeyTypes= +ssh-rsa-cert-v01@openssh.com"
。
將 "PubkeyAcceptedKeyTypes +ssh-rsa-cert-v01@openssh.com"
新增至用戶端設定檔。
Host *
PubkeyAcceptedKeyTypes +ssh-rsa-cert-v01@openssh.com