使用本地PowerShell调用Ansible时无法获取凭据

时间:2018-04-20 22:14:30

标签: powershell ansible azure-automation azure-authentication

我在Azure VM中的Ubuntu虚拟机上有一个Ansible代码。当我使用SSH直接使用Bitwise等软件连接到我的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 

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

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

1 个答案:

答案 0 :(得分:0)

来自Ansible文档:

  

为Azure模块提供凭据模块提供了几种提供凭据的方法。对于CI / CD工具,例如Ansible

     

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

     

使用环境变量

     

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

     

<强> 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
     

可以在其中存储多组凭据   凭证文件创建多个部分。每个部分都是   考虑了个人资料。模块查找[默认]配置文件   自动。在环境中定义AZURE_PROFILE或传递一个   profile参数,用于指定特定的配置文件。

     

作为参数传递

     

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

     
      
  • client_id
  •   
  • 秘密
  •   
  • subscription_id
  •   
  • 租户
  •   
     

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

     
      
  • ad_user
  •   
  • 密码
  •   
  • subscription_id
  •