在Powershell(PowerCLI)脚本中隐藏默认明文密码

时间:2015-12-17 19:43:01

标签: passwords powercli

我正在开发一个从模板部署和配置VM的PowerCLI脚本。在配置阶段,我必须运行一些命令,这些命令需要Guest的root用户名和密码才能在VM上运行Scripts。这些是模板的默认凭据,它们在我的脚本中以明文形式存储。配置完成后,我让用户使用SecureString凭据更改其密码。

让我担心的是,由于我正在配置虚拟机的性质,如果有人能够找到我脚本中的默认纯文本凭据,则有一个很大的机会可以访问此虚拟机。有没有办法将默认凭据存储在加密的脚本中?

1 个答案:

答案 0 :(得分:2)

可以使用可信存储和ConvertTo-SecureString存储针对用户帐户加密的凭据。

以下是如何针对您的帐户加密值,其中您要加密的值存储在$Password中。确保在$configDir

下设置将密码存储在文件中的路径
$Password = "SomeValue"
#Path to store the credential
$configDir = "$Env:AppData\WindowsPowerShell\Modules\YourScriptName\0.1\Config.ps1xml"
$password = ConvertTo-SecureString "SomeValue" -AsPlainText -Force
$password | ConvertFrom-SecureString | Export-Clixml $configDir -Force

现在,要从加密中恢复密码:

$password = Import-Clixml -Path $configDir -ErrorAction STOP | ConvertTo-SecureString
$Ptr = [System.Runtime.InteropServices.Marshal]::SecureStringToCoTaskMemUnicode($password)
$password= [System.Runtime.InteropServices.Marshal]::PtrToStringUni($Ptr)

您最终将密码存储在$password