通过命令行(MS Windows)从局域网访问DMZ(外部域)中服务器的最佳方法

我有两台服务器:

局域网中的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)。