我在这里看到了相关的问题,但它们似乎并没有完全回答我的需要.
我们使用Powershell脚本来部署我们的应用程序,并且大多数环境(UAT等)的配置文件中的密码等信息都是纯文本.这不是一个大问题,但是当谈到PREPROD和PROD时,这是一个大问题.因此我们在配置中有一些标记,如"{{prompt-password}}",它将提供登录对话框(Get-Credential
),进行部署的人员可以输入凭证并继续部署.
但这对自动部署没有实际帮助(意味着通过TeamCity等工具一键部署)
我应该使用非对称加密(http://msdn.microsoft.com/en-us/library/as0w18af.aspx),其中密码使用公钥加密,在配置中输入,并存储私钥(如上所述)这里http://msdn.microsoft.com/en-us/library/tswxhw92.aspx)在"代理"中(如在TeamCity将触发部署的VM中,并且具有受限访问权限)运行自动部署并且可以解密密码?在密码学和东西上并不是很强大,但这听起来像是要走的路吗?还有其他建议吗?人们如何处理这种自动部署?
更新:
好的,我已经完成并实施了它.我在C#中编写了一个使用Crypography库的控制台应用程序.该应用程序生成密钥:
RSACryptoServiceProvider rsa = GetRsa(containerName);
File.WriteAllText("keys.kez",rsa.ToXmlString(true));
Run Code Online (Sandbox Code Playgroud)
我也拿出了公钥:
File.WriteAllText("public.pke", rsa.ToXmlString(false));
Run Code Online (Sandbox Code Playgroud)
将公钥提供给必须加密密码并要求他们在配置中输入密码的任何人.将keys.kez文件放在必须运行部署的任何代理中.
c# deployment powershell configuration production-environment
当我以特定用户身份运行脚本时遇到错误,但不是以我自己的用户帐户运行脚本。这是在 Windows 2012R2 上。Powershell 模块已安装并已使用一段时间,但使用另一个帐户会阻止其运行。因为我已经能够运行它,所以我觉得我可以排除脚本中任何丢失的文件或错误的命令。脚本的其余部分取决于此。我还使用将通过自动化运行命令的服务帐户运行 Convertto-securestring 选项,但它仍然无法正常工作。
这是我运行的用于转换密码的安全密码脚本
$password = "password"
$secureStringPwd = $password | ConvertTo-SecureString -AsPlainText -Force
$secureStringText = $secureStringPwd | ConvertFrom-SecureString
Set-Content "E:\temp\ExportedPassword.txt" $secureStringText`
Run Code Online (Sandbox Code Playgroud)
这是尝试以用户 B 身份运行后的错误消息
line 4 $pwdTxt = Get-Content "E:\temp\ExportedPassword.txt"
line 5 $securePwd = $pwdTxt | ConvertTo-SecureString
ConvertTo-SecureString : Key not valid for use in specified state.
At E:\temp\get_user_cliffsv4.ps1:5 char:24
+ $securePwd = $pwdTxt | ConvertTo-SecureString
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [ConvertTo-SecureString],
CryptographicException
+ FullyQualifiedErrorId :
ImportSecureString_InvalidArgument_CryptographicError,Microsoft.PowerShell.
Commands.ConvertToSecureStringCommand
Run Code Online (Sandbox Code Playgroud)
我已通过自动化软件多次运行此脚本,但在测试时,由于此错误,我必须以我的个人帐户运行该命令,并且为了解决此问题以便我可以完成测试,我调用了该选项。我的问题是,我使用的帐户是否缺少任何特定权利?我是否必须在该帐户下安装 Powershell 扩展,或者我可以在 PS 或服务器上设置/更改某些内容以允许服务帐户运行此脚本吗?提前致谢!
我读过这个博客:
https://gallery.technet.microsoft.com/scriptcenter/Encrypt-Password-and-use-dd07f253
我已经测试了这行代码:
$encrypted = "01000000d08c9ddf0115d1118c7a00c04fc297eb010000000ffb51b2e604034a982598093219de570000000002000000000003660000c0000000100000004387d7a6f294bdcf25725159f7edaa390000000004800000a000000010000000efac6eb2cb924bf1cf893a9ddfdeeff71800000079b98b725901857051e84b78ba6e20da94752516a02833c114000000dbf49438a6ea07c06c3846fc23e725a081792782"
$password = ConvertTo-SecureString -string $encrypted
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
ConvertTo-SecureString : Clé non valide pour l'utilisation dans l'état spécifié。
任何的想法 ?为什么我会收到这个错误?
谢谢