我有两台服务器:
局域网中的SVR1(Windows Server 2008) – 域的一部分
DMZ中的SVR2(Windows Server 2008) – 工作组
我需要通过命令行批量访问SVR1中的SVR2 – 复制一些文件,执行sc命令pipe理SVR2上的服务。 这批计划,所以我需要访问SVR2没有凭据input。
我知道的唯一可能性是在两台服务器上都有相同的用户名和密码,但不是那么优雅,这是潜在的风险。
什么是解决我的问题的最佳方法? 如果没有第三方软件,这将是最好的。
由于SVR1和SVR2不是同一个AD域的一部分,因此您需要将SVR2的凭据存储在SVR1上的某个位置,供您的自动脚本访问。
通过使用WinRM和充分更新的Powershell,Powershell Remoting可让您build立从SVR1到SVR2的连接,并以自动方式在命令行上执行任何您能想到的操作。
您可以使用Powershell将密码保存在Windows Credential Vault中,并且脚本可以从Credential Vault访问凭据:
https://gallery.technet.microsoft.com/scriptcenter/How-to-add-credentials-to-c8e9bd5f
我会build议这是一个稍微好一点的方式来存储凭据。 更古老的经典的存储凭据的方式是做这样的事情:
read-host -assecurestring | convertfrom-securestring | out-file operationspassword.txt
然后在你的脚本中,像这样“解密”密码:
$pass = Get-Content operationspassword.txt | convertto-securestring $creds = New-Object -Typename System.Management.Automation.PSCredential -argumentlist "SRV2\admin",$pass
“encryption”的信用卡只能由同一个账户和原来encryption的机器解密,所以你不能窃取SecureString的文本表示并在别的地方使用。 但以这种方式存储信用额度还是不专业的,我一般不会提出这样的build议。
另外不要忘记修改您的Powershell TrustedHosts列表,以允许连接到“不受信任”的机器…您必须这样做,因为您没有使用Kerberos或SSL。
这让我想起…使用SSL进行WinRM连接以获得更好的安全性: http : //support.microsoft.com/kb/2019527
Windows 2008 WinRM端口是80(HTTP)和443(HTTPS)。
微软很快意识到这些端口已经被使用了,所以:
Windows 2008 R2及更高版本WinRM端口是5985(HTTP)和5986(HTTPS)。