批处理脚本 - 访问Windows凭据管理器密码(或如何加密和使用密码)

问题描述:

我有一个服务器A上的批处理脚本,它使用'schtasks'命令激活服务器B上的计划任务。此命令需要用户名和密码才能访问其他服务器,但我们不希望以纯文本形式存储此数据。有没有办法以非纯文本格式保存此密码?即使密码以明文形式传递给'schtasks'命令,也比将其存储在批处理脚本本身中更好。批处理脚本 - 访问Windows凭据管理器密码(或如何加密和使用密码)

+0

检查此questuion-> http://*.com/questions/25582295/xor-a-string-in-a-bat-file它是rahter混淆,但可能是它会为你好。 – npocmaka 2014-09-25 21:43:22

+0

你还没有注明你的服务器版本。你可以使用'cmdkey'命令吗? – 2014-09-26 06:27:36

+0

我们使用的是Windows 2008 R2 Service Pack 1.cdmkey命令只列出机器在凭证管理器中的用户名和服务器,但我没有在语法定义中看到显示密码或将密码传递给批处理的方法脚本。 – 2014-09-29 15:08:50

难道你不能使用Kerberos吗?

如果你不能,试着看看这个Different ways to store a password variable in a Java web application?选项3.你可以使用一个密钥,并共享密钥来解密你所需要的凭证,但是它的安全性仍然很差。

如果您可以使用Kerberos,只需检查SERVERB Kerberos令牌是否允许。它可能是SERVERA上的本地用户或域用户。例如,您通过“schtasks”开始'SCRIPT.bat'为Script_User_A on SERVERA; Script_User_A是一个域用户,具有较低的权限。 SERVERB在收到任何第一个请求后立即用SERVERA启动质询/响应,要求Script_User_A证明其身份。 Script_User_A将做到这一点,SERVERB很高兴,一切正常。如果Malicious_User尝试执行'SCRIPT.bat',SERVERB将发送一个质询,Malicious_User将无法​​“响应”,并且SERVERB将知道'SCRIPT.bat'由其他人执行。这个挑战/响应机制是免费的:你需要研究微软的TechNet和API,但是这是值得的,尤其是如果你习惯在Windows上开发的话。

+0

我对Kerberos不熟悉。除了在使用批次时没有输入服务器密码这一事实以外,挑战/响应与用户名和密码有什么不同? – 2014-09-29 17:08:38

+1

在挑战 - 响应中,密码永远不会在网络上发送。在Windows中,实现了域控制器(也称为Kerberos核心)知道您的域密码以及您的SERVER_A。这样,当server_b想要检查它是否真的是server_a正在运行该脚本时,它只需要来自server_a(一个令牌)的挑战。 server_b将发送这个挑战到DC(在kerberos中一切都盲目地信任域控制器),并且DC回复“它实际上是server_a”或“不是它不是”。 server_b不依赖于server_a来验证server_a,这很好。 – sc0p 2014-10-03 07:25:22