【问题标题】:Linux executes a command on a remote Windows server without SSH/TelnetLinux 在没有 SSH/Telnet 的远程 Windows 服务器上执行命令
【发布时间】:2013-05-02 03:33:01
【问题描述】:

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

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

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

【问题讨论】:

  • @Kate Gregory,感谢您更正问题文本!

标签: deployment jenkins continuous-integration cross-platform remote-access


【解决方案1】:

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

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

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

  3. 如果生产机器有 IIS,让 Jenkins 触发 asp.net 脚本,对 cgi 脚本执行表单 POST,或上传触发文件。 CentOS 上的 curl 和 wget 会有所帮助。

  4. 作为最后的手段,添加另一台 Windows 计算机。在上面安装 SSH。使用 SSH 从 Jenkins 连接到新机器,然后使用 powershell 从新机器连接到生产机器。

如果您决定执行第 4 步,我将使用 Power Shell 在远程计算机上运行命令。

PS2.0 默认安装在 Windows 2008 R2 上。

这是我如何做的一个例子。

$username = 'user'
$password = 'password'
$appHost = 'hostname'
$dest = 'C:\Unpack\'
$archive = "C:\Releases\new 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-Zip\7z.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
}

【讨论】:

  • 如何在 Linux 机器上运行?
  • 感谢 Stuart,您提供了很好的选择!我喜欢选项 3,并会试一试。
猜你喜欢
  • 1970-01-01
  • 2013-11-22
  • 1970-01-01
  • 2010-11-07
  • 2022-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-20
相关资源
最近更新 更多