Linux在远程Windows服务器上执行命令,不需要SSH/Telnet



我正在构建一个Jenkins服务器。部署步骤之一是在生产服务器上执行命令,将经过uat测试的工件下载到所需的文件夹中。Jenkins在CentOS Linux上运行,而生产服务器在Windows 2008 R2上运行。

但是,我的客户端不想在生产服务器上安装任何软件,因此通过SSH执行命令是不可能的。客户端在使用Telnet之前有过不愉快的经历。这是一个不安全的服务,已经在服务器上被禁用。

除了使用SSH和Telnet,还有其他方法在远程机器上执行命令吗?我正在考虑创建一个由特定事件触发的任务,但是如何在服务器上远程引发事件似乎不是一件容易的事。

我可以想到四种不同的解决方案:

  1. 在生产机器上有一个网络共享,Jenkins服务器可以将触发器文件放入其中。设置一个计划任务,检查文件并触发下载。

  2. 在生产机器上设置一个计划任务轮询Jenkins服务器以获取新文件。Powershell可以用来查询Jenkins的REST api

  3. 如果生产机器有IIS,让Jenkins触发一个asp.net脚本,对一个cgi脚本做一个表单POST,或者上传一个触发器文件。

  4. 作为最后的手段,添加另一台windows机器到混合中。在其上安装SSH。从Jenkins使用SSH到新机器,然后从新机器使用powershell到生产机器

如果您决定采用步骤4,我将使用Power Shell在远程机器上运行命令。

Windows 2008 R2默认安装PS2.0。

下面是我如何做的一个例子。

$username = 'user'
$password = 'password'
$appHost = 'hostname'
$dest = 'C:Unpack'
$archive = "C:Releasesnew release.7z"
$securePass = ConvertTo-SecureString -AsPlainText $password -Force
$cred = New-Object System.Management.Automation.PSCredential -ArgumentList $username,$securePass
"Create PowerShell Session"
$appSession = New-PSSession -ComputerName $appHost -Credential $cred -Authentication CredSSP 
invoke-command -session $appSession -scriptblock { param($dest,$archive) & 'C:Program Files (x86)7-Zip7z.exe' x -bd -aoa """-oc:$dest""" """c:$dest$archive"""} -args $dest,$archive
$remotelastexitcode = invoke-command -session $appSession -ScriptBlock { $lastexitcode }
if ( $remotelastexitcode -ne 0 )
{
  "Archive Extraction Failed. Is a file locked or open?"
  exit -1
}

最新更新