Connect-AzAccount - 如何避免 azure 设备身份验证?

Connect-AzAccount - how to avoid azure device authentication?

我已经安装了 PowerShell 6.1.3 版本并且 我想使用以下 Azure PowerShell 命令连接到 Azure 帐户:

Connect-AzAccount -Tenant <tenantId> -Subscription <subId>

输入此命令后,我收到 url 和一些代码的警告。 然后我必须去 URL 并在那里输入代码。之后,我连接到 Azure 帐户。

有什么方法可以避免这种确认吗?

我也尝试过使用以下命令来做到这一点:

az login -u <username> -p <password>

此命令仅 returns 一些帐户信息(subscriptionId、tenantId 等),但不会安装与此帐户的连接。

您有 2 个选择。

使用凭据登录(需要 Az.Accounts v 1.2.0 或更高版本)

您还可以使用授权连接到 Azure 的 PSCredential 对象登录。获取凭据对象的最简单方法是使用 Get-Credential cmdlet。当 运行 时,此 cmdlet 将提示您输入 username/password 凭据对。

$creds = Get-Credential
Connect-AzAccount -Credential $creds

使用服务主体登录

服务主体是非交互式 Azure 帐户。与其他用户帐户一样,他们的权限通过 Azure Active Directory 进行管理。通过仅授予服务主体所需的权限,您的自动化脚本将保持安全。

要了解如何创建用于 Azure PowerShell 的服务主体,请参阅 Create an Azure service principal with Azure PowerShell

来源:https://docs.microsoft.com/en-us/powershell/azure/authenticate-azureps?view=azps-1.3.0

1.To使用用户账号登录,尝试如下命令,确保你的账号没有启用MFA(Multi-Factor Authentication)。

$User = "xxx@xxxx.onmicrosoft.com"
$PWord = ConvertTo-SecureString -String "<Password>" -AsPlainText -Force
$tenant = "<tenant id>"
$subscription = "<subscription id>"
$Credential = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $User,$PWord
Connect-AzAccount -Credential $Credential -Tenant $tenant -Subscription $subscription

2.You也可以使用服务主体登录,使用如下命令。

$azureAplicationId ="Azure AD Application Id"
$azureTenantId= "Your Tenant Id"
$azurePassword = ConvertTo-SecureString "strong password" -AsPlainText -Force
$psCred = New-Object System.Management.Automation.PSCredential($azureAplicationId , $azurePassword)
Connect-AzAccount -Credential $psCred -TenantId $azureTenantId  -ServicePrincipal 

看到我回答的类似问题 ,它使用旧的 AzureRM 模块,对于 Az,只需更改最后一行。

如果您不熟悉服务主体,另请参阅:How to: Use the portal to create an Azure AD application and service principal that can access resources, the application id and authentication key 是您需要的 Azure AD Application Idstrong password

如果启用了多因素,那么下面的逻辑也应该有效

    $clientId = "***********************"
    $clientSecret = "********************"
    $tenantId = "***********************"
    $tempPassword = ConvertTo-SecureString "$clientSecret" -AsPlainText -Force
    $psCred = New-Object System.Management.Automation.PSCredential($clientId , 
    $tempPassword)
    Connect-AzAccount -Credential $psCred -TenantId $azureTenantId  -ServicePrincipal