【问题标题】:Connect-AzAccount - how to avoid azure device authentication?Connect-AzAccount - 如何避免 azure 设备身份验证?
【发布时间】:2019-07-20 07:10:21
【问题描述】:

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

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

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

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

我也尝试过使用以下命令:

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

此命令仅返回一些帐户信息(订阅 ID、租户 ID 等),但不会安装到此帐户的连接。

【问题讨论】:

    标签: azure powershell powershell-core


    【解决方案1】:

    1.要使用用户帐户登录,请尝试以下命令,确保您的帐户未启用 MFA(多因素身份验证)。

    $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.您也可以使用服务主体登录,使用如下命令。

    $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 
    

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

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

    【讨论】:

    • 我刚刚检查了您的第一个选项并收到以下错误:Connect-AzAccount:PowerShell Core 不支持用户名 + 密码身份验证。请使用设备代码身份验证进行交互式登录,或使用服务主体身份验证进行脚本登录。
    • @agawa17 如果是这样,看来您需要使用第二个选项,我的 powershell 版本是 5.1。另外,我推荐你使用第二种,如果你用非交互方式使用用户名+密码,那是不安全的,如果你启用了MFA,它也不起作用
    • 谢谢!当我在登录之前有一个 Azure AD 应用程序时,它将起作用。因此,我必须为此在 ps 脚本中创建一个 Azure AD 应用程序,但此操作需要我登录 Azure 帐户,并且我必须使用浏览器来确认登录。有没有其他方法可以在没有浏览器确认的情况下通过 Powershell 核心脚本登录 Azure 帐户?
    • 连接上述 powershell 脚本时出现错误:“Connect-AzAccount:adfs.myatos.net/adfs/services/trust/2005/usernamemixed 的联合服务返回错误:ID3242:无法对安全令牌进行身份验证或授权。”
    【解决方案2】:

    你有两个选择。

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

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

    $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

    【讨论】:

    • Az 模块不支持使用用户名和密码等凭据连接到 Azure 帐户。因此,我必须使用服务主体连接到 Azure 帐户。但要使用 PowerShell 核心创建 azure ad 应用程序和服务主体,我还必须先连接到 az 帐户。但是没有浏览器确认我无法连接(
    【解决方案3】:

    如果启用多因素,那么下面的逻辑也应该起作用

        $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 
    

    【讨论】:

    • 如果您解释了代码,此答案将对操作员更有帮助,但即便如此,这个问题已有两年之久,还有两个其他答案和一个已接受的答案。查看这些标签上最新的和未回答的问题。
    • @NicoNekoru 据我所知,答案与 JoyWang 的答案差不多。
    猜你喜欢
    • 2022-11-01
    • 1970-01-01
    • 2021-01-05
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多