0

我在 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 

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

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

4

1 回答 1

0

来自 Ansible 文档:

为 Azure 模块提供凭据 这些模块提供了多种提供凭据的方法。对于诸如 Ansible 之类的 CI/CD 工具

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

使用环境变量

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

AZURE_CLIENT_ID

AZURE_SECRET

AZURE_SUBSCRIPTION_ID

AZURE_TENANT

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

AZURE_AD_USER

AZURE_PASSWORD

AZURE_SUBSCRIPTION_ID

存储在文件中

在开发环境中工作时,可能需要将凭据存储在文件中。这些模块将在 $HOME/.azure/credentials 中查找凭据。该文件是一个 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 或传递配置文件参数以指定特定配置文件。

作为参数传递

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

  • client_id
  • 秘密
  • 订阅 ID
  • 租户

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

  • 广告用户
  • 密码
  • 订阅 ID
于 2018-04-21T18:31:37.930 回答