我在Azure VM中的Ubuntu虚拟机上有一个Ansible代码。当我使用SSH直接使用Bitwise等软件连接到我的VM时,代码中没有问题,我可以毫无错误地运行它。但我需要使用我的本地系统PowerShell运行我的Ansible代码。当我使用PowerShell调用Ansiable命令时,我会收到以下错误:
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
从本地计算机登录,但错误没有任何变化。
答案 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