我有两台服务器:
LAN 中的 SVR1(Windows Server 2008)-域的一部分
DMZ 中的 SVR2 (Windows Server 2008) - 工作组
我需要通过命令行批处理从 SVR1 访问 SVR2 - 复制一些文件并执行 sc 命令来管理 SVR2 上的服务。此批处理已安排好,因此我需要在不输入凭据的情况下访问 SVR2。
我知道的唯一可能性是在两台服务器上使用相同的用户名和密码,但这并不那么优雅,而且存在潜在的风险。
解决我的问题的最佳方法是什么?最好不使用第三方软件。
答案1
由于 SVR1 和 SVR2 不属于同一个 AD 域,您需要将 SVR2 的凭据存储在 SVR1 上的某个位置,以供您的自动脚本访问。
使用 WinRM 和足够更新的 Powershell,Powershell Remoting 将允许您建立从 SVR1 到 SVR2 的连接并以自动方式在命令行上执行您能想到的任何事情。
您可以使用 Powershell 将密码保存在 Windows Credential Vault 中,并且您的脚本可以从 Credential Vault 访问凭据:
https://gallery.technet.microsoft.com/scriptcenter/How-to-add-credentials-to-c8e9bd5f
我建议你使用这种方法来存储凭证,因为它是一种稍微好一点的方法。存储凭证的旧方法和经典方法如下:
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
“加密”的凭据只能由最初加密凭据的同一帐户和同一台机器解密,因此您不能窃取 SecureString 的文本表示并将其用于其他地方。但以这种方式存储凭据仍然有点不专业,我一般不建议这样做。
另外,不要忘记修改您的 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)。