[玩转系统] PowerShell 脚本中的安全密码(凭据)加密
作者:精品下载站 日期:2024-12-14 20:02:49 浏览:16 分类:玩电脑
PowerShell 脚本中的安全密码(凭据)加密
在自动化场景中,管理员通常必须将密码直接存储在 PowerShell 脚本正文中。如您所知,在生产环境中使用时非常不安全,因为其他服务器用户或管理员可以看到明文形式的密码。所以最好采用更安全的方式在PowerShell脚本中使用密码,或者在无法使用交互式输入的情况下对密码进行加密。
使用 Get-Credential cmdlet 在脚本中以交互方式提示用户输入密码是安全的。例如,让我们提示用户输入用户名和密码并将其保存在 PSCredential 对象中:
$Cred = Get-Credential
当寻址 PSCredential 变量的属性时,您可以找到指定的用户名。
$Cred.Username
但是,当尝试显示用户密码时,将返回以下文本:System.Security.SecureString,因为密码保存为 SecureString。
$Cred.Password
我们保存在 $Cred 变量中的 PSCredential 对象可以在支持此类对象的 cmdlet 中使用。
$Cred.Username 和 $Cred.Password 参数可在不支持 PSCredential 对象但需要输入用户凭据的 cmdlet 中使用。
您还可以使用带有 AsSecureString 属性的 Read-Host cmdlet 来提示用户输入密码。
$pass = Read-Host "Enter your password" -AsSecureString
在这种情况下,您将无法查看存储密码的 $pass 变量的内容。
在上面考虑的 PowerShell 脚本中使用密码的方式中,运行脚本时使用了交互式密码输入。但是,这些方法不适用于自动运行或使用任务计划程序运行的场景。
在这种情况下,将帐户凭据(名称和密码)加密并将其保存到磁盘上的加密文本文件或直接在脚本中使用会更方便。
因此,使用 ConvertFrom-SecureString cmdlet,您可以将密码从 SecureString 格式转换为加密字符串(使用 Windows 数据保护 API - DPAPI 进行加密)。您可以在屏幕上显示加密的密码或将其保存到文件中:
$Cred.Password| ConvertFrom-SecureString | Set-Content c:\ps\passwordfile.txt
要使用文件中的加密密码,必须使用 ConvertTo-SecureString cmdlet 将其转换回 SecureString 格式:
$username = 'corp\admin'
$pass = Get-Content c:\ps\passwordfile.txt | ConvertTo-SecureString
$creds = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $pass
这样,您就获得了一个 PSCredential 对象,其用户凭据位于 $creds 变量中。
但是,如果您尝试将passwordfile.txt复制到另一台计算机或用于其他用户(而不是创建密码的用户),您将看到
$creds.password
变量为空且不包含密码。问题是 DPAPI 加密使用存储在用户配置文件中的私钥。如果没有密钥,您将无法解密密码文件。
ConvertTo-SecureString : Key not valid for use in specified state.
"Cannot process argument because the value of argument "password" is null. Change the value of argument "password" to a non-null value."
如果脚本在另一个用户(服务)帐户下或在另一台计算机上启动,则必须使用与 DPAPI 不同的另一种加密方法。您可以使用 -Key 或 -SecureKey 参数指定外部加密密钥。
例如,您可以在 PowerShell 中生成 256 位 AES 密钥并使用它来解密文件。将此密钥保存到文本文件password_aes.key。
$AESKey = New-Object Byte[] 32
[Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($AESKey)
$AESKey | out-file C:\ps\password_aes.key
现在您可以使用此密钥将密码保存到文件中:
$Cred.Password| ConvertFrom-SecureString -Key (get-content C:\ps\password_aes.key)| Set-Content c:\ps\passwordfile.txt
不要忘记,如果您在 PowerShell 脚本中指定域帐户并且您的域具有定期密码更改策略,则您必须在每次密码更改后更新此文件(您可以使用细粒度密码策略为特定帐户创建单独的密码策略)。
因此,您有两个文件:一个包含加密密码的文件 (passwordfile.txt),另一个包含加密密钥 (password_aes.key)。
您可以将它们转移到另一台计算机并尝试从文件中获取密码(您可以将带有密钥的文件存储在共享网络文件夹中)。
$pass = Get-Content c:\ps\passwordfile.txt | ConvertTo-SecureString -Key (get-content \srv1\Shared\password_aes.key)
$pass
如果您不想麻烦地使用 AES 密钥创建单独的文件,则可以将加密密钥直接集成到脚本中。然后在这两种情况下使用以下内容代替密钥:
[Byte[]] $key = (1..16)
$Cred.Password| ConvertFrom-SecureString -Key $key| Set-Content c:\ps\passwordfile.txt
解密:
[Byte[]] $key = (1..16)
$pass = Get-Content c:\ps\passwordfile.txt | ConvertTo-SecureString -Key $key
可以看到,密码不为空,因此已经成功解密,可以在其他电脑上使用。
提示。您必须限制对包含 AES 密钥的文件的访问,以便只有运行脚本的用户或帐户才能访问它。将password_aes.key 保存到共享文件夹后,请仔细检查其NTFS 权限。
最后,最不舒服的就是这里了。从 PSCredential 对象中以明文形式获取密码非常容易:
$Cred.GetNetworkCredential().password
您也可以对 SecureString 执行此操作:
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pass)
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
正如您所看到的,这就是为什么您不能在 DC 以外的任何地方保存特权帐户(例如域管理员)的密码的原因。
提示。为了防止特权管理帐户使用类似 Mimikatz 的工具从内存中提取密码,请使用包括组织操作在内的复杂操作。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag