2016-01-23 31 views
2

我已使用AzureRM命令行开关自动部署Azure。这些命令行需要登录,所以我尝试使用Save-AzureRMProfile/Select-AzureRMProfile来提供保存的配置文件。PowerShell AzureRM命令 - 避免在Save-AzureRMProfile中过期

但是过了一段时间,配置文件似乎过期了,我需要重新登录。我想按计划自动运行脚本,因此手动重新登录不是解决方案。

如何避免配置文件到期?

回答

4

简单的答案是,你无法避免过期,你的令牌过期,需要重新认证。 (这可能会令人担忧,如果这些凭证可能会持续) - 但

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上,然后下载,解密并登录到我所坐的任何系统上。

+2

谢谢!一些注意事项,以防人们有类似的问题:1.登录使用-Credential由于某种原因从不报告失败,除非你请求一个特定的TenantId(也许SubscriptionId?)。它成功返回,但其他命令不起作用。 2.这不适用于Microsoft帐户,但您始终可以在Azure AD中创建用户(仅在旧门户中找到该用户)并使用它。 –