【问题标题】:Failed to get credentials when calling Ansible using Local PowerShell使用本地 PowerShell 调用 Ansible 时无法获取凭据
【发布时间】:2018-04-20 22:14:30
【问题描述】:

我在 Azure VM 中的 Ubuntu 虚拟机上有一个 Ansible 代码。当我通过Bitwise等软件直接使用SSH连接到我的VM时,代码没有问题,我可以运行它而不会出现任何错误。但我需要使用本地系统 PowerShell 运行我的 Ansible 代码。当我使用我的 PowerShell 调用 Ansiable 命令时,我会收到以下错误:

PowerShell 命令:

PS C:\Users\Reza> New-SSHSession -ComputerName "13.**.**.***" -Credential ubuntu -KeyFile "C:\Users\Reza\Desktop\ndbench\Azure\Automation\01_get_metrics\ssh\myPrivateKey_rsa"
PS C:\Users\Reza> (Invoke-SSHCommand -Index 0 -Command "sudo pwsh /root/test.ps1").Output

输出:

SessionId  Host                                                                      Connected                                                          
---------  ----                                                                      ---------                                                          
    0      13.**.**.***                                                                 True
PLAY [Create Azure VM] *********************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [Create VM] ***************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Failed to get credentials. Either pass as parameters, set environment variables, define a profi
le in ~/.azure/credentials, or install Azure CLI and log in (`az login`)."}
    to retry, use: --limit @/home/ubuntu/azure_create_vm.retry

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=1 

您能否指导我为什么会收到此错误以及如何解决?

附: 1:我试过Putty,错误是一样的。似乎如果我从另一台设备远程调用我的 Ansible(使用 SSH),我会得到同样的错误。
附言2:我尝试在PowerShell和Putty中使用az login从本地机器登录,错误没有任何变化。

【问题讨论】:

标签: powershell ansible azure-automation azure-authentication


【解决方案1】:

来自 Ansible 文档:

向 Azure 模块提供凭据 这些模块提供了多种方式来提供您的凭据。对于 Ansible 等 CI/CD 工具

Tower 或 Jenkins,您很可能希望使用环境 变量。对于本地开发,您可能希望存储您的 主目录中的文件中的凭据。当然,你 始终可以将凭据作为参数传递给剧本中的任务。 优先顺序是参数,然后是环境变量,最后是 终于在你的主目录中找到了一个文件。

使用环境变量

要通过环境传递服务主体凭据,请定义 以下变量:

AZURE_CLIENT_ID

AZURE_SECRET

AZURE_SUBSCRIPTION_ID

AZURE_TENANT

要通过环境传递 Active Directory 用户名/密码,请定义 以下变量:

AZURE_AD_USER

AZURE_PASSWORD

AZURE_SUBSCRIPTION_ID

存储在文件中

在开发环境中工作时,可能需要 将凭据存储在文件中。这些模块将在 $HOME/.azure/凭据。该文件是一个 ini 样式文件。它会看起来 如下:

[default]
subscription_id=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
client_id=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
secret=xxxxxxxxxxxxxxxxx
tenant=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

可以在其中存储多组凭据 通过创建多个部分来创建凭据文件。每个部分都是 被认为是个人资料。模块查找 [default] 配置文件 自动地。在环境中定义 AZURE_PROFILE 或传递一个 profile 参数来指定一个特定的配置文件。

作为参数传递

如果您希望将凭据作为参数传递给任务,请使用 服务主体的以下参数:

  • client_id
  • 秘密
  • subscription_id
  • 租户

或者,为 Active Directory 传递以下参数 用户名/密码:

  • ad_user
  • 密码
  • subscription_id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    相关资源
    最近更新 更多