如何避免在PowerShell脚本中保存用户名和密码

时间:2012-12-21 15:26:43

标签: security powershell password-encryption

所以基本上我想编写一个Powershell脚本,它将导出最近1天的Windows Server Backup备份日志,将信息格式化为一个漂亮的小表,然后SMTP将其发送到客户本地Exchange之外的外部位置。我有一个可以用于此目的的智能主机,以及凭证等。

但是我不希望以纯文本形式将Pow和Shell中的UN和密码存储起来,或者让脚本以纯文本格式运行。

有解决方法吗?

干杯!

1 个答案:

答案 0 :(得分:0)

我设法通过将密码作为安全字符串并保存它来解决类似的问题,作为加密的标准字符串&#34;到一个名为&#34; 帐户的文件。用户 .pwd&#34;其中帐户是与密码关联的帐户的名称,而用户是生成安全字符串的用户(只有此用户才能解密该文件)。< / p>

这与@Keith使用的方法非常相似,如果您在上面的问题评论中遵循链接。下面的方法更容易理解,因为它不直接与[System.Runtime.InteropServices.Marshal]类一起玩。

更多地涉及从文件内容转换密码,但这是一个逐步完成整个过程的示例:

# Create credential object by prompting user for data
$Credential = Get-Credential

# Encrypt the password to disk
$Credential.Password | ConvertFrom-SecureString | Out-File Account.User.pwd

# Now to read it back again...
$SecureString = Get-Content Account.User.pwd | ConvertTo-SecureString

# Create credential object programmatically
$NewCred = New-Object System.Management.Automation.PSCredential("Account",$SecureString)

# Reveal the password!
$NewCred.GetNetworkCredential().Password

关于这种方法的想法:

  1. 抵制在最后一步将密码转储到变量中的诱惑,以防止它在内存中以逗号(以明文形式)挂起,直到变量被删除为止。每次从PSCredential转换都不需要花费太多的打字费用。
  2. 只有生成文件的用户才能阅读;如果多个用户需要访问共享帐户的密码,则每个用户都必须生成这样的文件(因此建议的文件命名)。
  3. 这并不仅限于密码。您要加密到磁盘的任何字符串都可以用作&#34;密码&#34;在原始凭证对象中。数据库连接字符串,尤其是那些有用户名和密码的人会想到......
  4. 使用文件系统安全性/ ACL来阻止不需要的人远离pwd文件。
  5. 使用密码在磁盘上创建一个文件,即使它是加密字符串,也可能不是人们喜欢的。如果没有使用第三方密码管理系统,这 是对使用文件系统安全性和明文文件的明显改进。你知道它发生了......
  6. 更多信息: