首页 > 开发 > PowerShell > 正文

PowerShell 脚本中的密码保存的方法

2020-05-30 20:21:45
字体:
来源:转载
供稿:网友

引言

笔者在《PowerShell 远程执行任务》一文中提到了在脚本中使用用户名和密码的基本方式:

$Username = 'xxxx'$Password = 'yyyy'$Pass = ConvertTo-SecureString $Password -AsPlainText -Force$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$Pass

上面的代码仅仅是能工作而已,因为在稍有安全性要求的环境中都不会允许明文密码的出现。本文将介绍在 PowerShell 脚本中如何以比较安全的方式使用密码。

把密码转为 SecureString

先来了解下面两个概念:

SecureStringEncrypted Standard String

SecureString 是 .net 中的一个类型,它是为了解决安全性而设计出来的一种特殊的字符串类型。比如你使用一个密码字符串创建 SecureString 对象,你无法通过这个对象还原出原来的密码字符串,但是却可以把 SecureString 对象当做密码使用。
Encrypted Standard String 是指经过加密后的一个字符串。

ConvertTo-SecureString 命令可以通过明文的字符串创建 SecureString 对象:

$SecurePwd = ConvertTo-SecureString "123456" -AsPlainText -Force

然后再使用 $SecurePwd 创建 Credential 等身份信息。这种方式就是笔者在引言部分使用的方法,这是不安全的,因为任何能够查看脚本的人都能从中找出密码。

把 SecureString 转为加密字符串

通过 ConvertFrom-SecureString 命令,我们可以把一个 SecureString 对象转换成一个 Encrypted Standard String(加密后的一个字符串),然后保存到文件中。在创建 Credential 时直接使用前面保存的文件,从而避免明文密码在系统中出现。

$SecurePwd = ConvertTo-SecureString "123456" -AsPlainText -ForceConvertFrom-SecureString $SecurePwd

上图显示 ConvertFrom-SecureString 命令生成的加密字符串,我们把它保存到文本文件中:

ConvertFrom-SecureString $SecurePwd | Out-File "D:/pwd.txt"

看看内容:

好了,接下来就可以直接使用 pwd.txt 文件了。

一种看起来比较正常,也很安全的推荐用法:

代码如下:Read-Host "Enter Password" -AsSecureString | ConvertFrom-SecureString | Out-File "D:/pwd.txt"

执行这行命令,会要求你输入密码:

此处使用键盘输入代替了明文的密码字符串。

介绍了 ConvertFrom-SecureString 命令的用法后就可以介绍 ConvertTo-SecureString 命令的另外一个用法,把加密字符串转换成 SecureString 对象:

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表