az cli - 如何使用凭据登录并禁止提示输入密码?

az cli - how to login using credentials and supress prompt for password?

我创建了 Azure AD 安全原则。而且我已经继续并创建了一个秘密的安全字符串,因此我不必将其以纯文本形式保存在某处。

现在,在我使用 az cli 的部署脚本中,我想使用这些凭据登录到 Azure,但系统一直提示我输入密码。我想避免提示,只提供客户端密码或加密密码作为参数。

代码如下:

#Load Environment variables
$localenv = (Get-Content './environmentVars.json' | Out-String | ConvertFrom-Json)
$AzCred = Get-Credential -UserName $localenv .APP_ID
az login --service-principal -u $AzCred.UserName -p $localenv.APP_ID_CLIENT_SECRET --tenant $localenv.AZ_TENANT_ID

当我 运行 脚本时,它会这样做:

PS C:\Users\me> .\deploy-resources.ps1

PowerShell credential request
Enter your credentials.
Password for user [GUID for Security Principle]: 

有什么方法可以将它传递给 powershell 脚本吗?

至于秘密的加密版本,我是这样创建的:

$Secure = Read-Host -AsSecureString (supply the secret)
$Encrypted = ConvertFrom-SecureString -SecureString $Secure

然后我用客户端密钥创建一个安全字符串:

 $Secure2 = ConvertTo-SecureString -String $Encrypted

如果有办法,我想将 $Secure2 的内容保存在我的 json 文件中并使用它来代替实际的秘密值。

如有任何提示,我们将不胜感激。

我们已尝试使用您正在使用的相同 PowerShell 脚本,但遇到了与密码提示相同的问题。

我们对您的脚本进行了如下更改,无需密码提示即可登录。

$localenv = (Get-Content -Path "C:\Users\v-aghose\Desktop\environmentVars.json.txt" | Out-String | ConvertFrom-Json)
#$AzCred = Get-Credential -UserName $localenv.APP_ID

az login --service-principal -u $localenv.APP_ID -p $localenv.APP_ID_CLIENT_SECRET --tenant $localenv.AZ_TENANT_ID --allow-no-subscriptions

输出:-

如果我们将客户端密码作为加密的安全字符串传递,这将不适用于登录。为了让它登录,我们必须解码加密的字符串。所以加密client secret会造成浪费。

有关解密加密安全字符串的更多信息,请参阅此 SO THREAD