我已使用AzureRM
命令行开关自动部署Azure。这些命令行需要登录,所以我尝试使用Save-AzureRMProfile
/Select-AzureRMProfile
来提供保存的配置文件。PowerShell AzureRM命令 - 避免在Save-AzureRMProfile中过期
但是过了一段时间,配置文件似乎过期了,我需要重新登录。我想按计划自动运行脚本,因此手动重新登录不是解决方案。
如何避免配置文件到期?
我已使用AzureRM
命令行开关自动部署Azure。这些命令行需要登录,所以我尝试使用Save-AzureRMProfile
/Select-AzureRMProfile
来提供保存的配置文件。PowerShell AzureRM命令 - 避免在Save-AzureRMProfile中过期
但是过了一段时间,配置文件似乎过期了,我需要重新登录。我想按计划自动运行脚本,因此手动重新登录不是解决方案。
如何避免配置文件到期?
简单的答案是,你无法避免过期,你的令牌过期,需要重新认证。 (这可能会令人担忧,如果这些凭证可能会持续) - 但
Add-AzureRmAccount
确实需要一个基本参数。因此,您可以将您的凭证保存到一个文件,而是每次都会自动使用实时凭证登录。
你可以使用标准的pscredential保存机制,这个问题对你来说是一个pscredential不可移动的,为了解决这个问题,你可以创建你自己的密钥来传递给pscredential。
$key = New-Object byte[](32)
$rng = [System.Security.Cryptography.RNGCryptoServiceProvider]::Create()
$rng.GetBytes($key)
然后,您可以使用此密钥来创建可移动的安全字符串。显然,这个关键是你的认证,所以它需要被安全地存储。
$cred = Get-Credential
$SecureStringWithKey = $cred.Password | ConvertFrom-SecureString -Key $key
您可以编码使用Base64的密钥,并将其添加为一个环境变量等
$base64key = [Convert]::ToBase64String($key)
在另一端,解码串
$key = [System.Convert]::FromBase64String($base64key)
,并推回至SecureString的,并重建一个凭证对象。
$secureStringPassword = $AuthObject.SecureStringWithKey | ConvertTo-SecureString -Key $key
$cred = new-object -typename System.Management.Automation.PSCredential `
-argumentlist $Username, $secureStringPassword
然后,您可以用
Add-AzureRmAccount -Credential $cred
我个人的态度对待所有的这个登录是创建一个psobject与所有保存的这些细节,(他们键,tenantid和PSCredential的)创建一个json字符串,然后使用证书对其进行加密。这样我可以将加密的json文件存储在blob上,然后下载,解密并登录到我所坐的任何系统上。
谢谢!一些注意事项,以防人们有类似的问题:1.登录使用-Credential由于某种原因从不报告失败,除非你请求一个特定的TenantId(也许SubscriptionId?)。它成功返回,但其他命令不起作用。 2.这不适用于Microsoft帐户,但您始终可以在Azure AD中创建用户(仅在旧门户中找到该用户)并使用它。 –