从* nix在远程Windows机器上执行exe或bat文件

时间:2011-08-12 06:19:45

标签: linux windows shell ant

我正试图在Linux上的云端远程Windows机器上执行bat文件。 bat文件启动selenium服务器,然后运行我的selenium测试。我无法在该机器上启动selenium RC服务器。我尝试使用Telnet,但问题是当telnet会话关闭时,RC服务器端口也被关闭。作为我的代码,我的代码必须启动服务器,所以我尝试使用ANT telnet任务,并以端口关闭的两种方式执行telnet的shell脚本。

我读过Open SSH,psexec for linux和cygwin。但我没有得到如何使用这些,他们将解决我的问题。

我试图启动一个启动服务器的服务但是在这种方法中我没有看到浏览器所有测试都在后台运行,因为我的脚本需要屏幕截图浏览器可见性。

现在我的问题是使用什么,哪个更适合我的工作。 而我所选择的应该由shell,ant或php代码执行。

提前致谢。

4 个答案:

答案 0 :(得分:15)

让我们来看看你提到的各种选择:

  • psexec :这几乎只是PC的一部分。此外,您必须确保较新的Windows计算机可以通过默认设置的UAC。当您尝试执行需要管理员权限的操作时,UAC会一直在Vista和Windows 7上看到。您可以尝试一种名为winexe的东西,这是一个可以执行 psexec 协议的Linux程序,但我在使其工作时遇到了问题。
  • OpenSSH :SSH主要有两种,Open SSH是绝大多数网站使用的。 SSH比其他方法有几个优点:
    • SSH是安全的:您的网络流量已加密。
    • SSH可以与密码无关:您可以设置SSH以使用私钥/公钥。这样,您甚至不必知道远程服务器上的密码。这使得它更加安全,因为您没有将密码存储在各种系统上。并且,在许多Windows站点中,密码必须每个月左右更改一次,否则帐户将被锁定。
    • SSH不仅可以执行远程命令:SSH上有两个子协议,称为SCP和SFTP。这些允许您在两台计算机之间传输文件。由于它们可以通过 SSH 工作,因此您可以获得 SSH 的所有优势,包括加密数据包和公钥/私钥保护。
    • SSH在Unix世界中实现良好:您将找到内置于AntMaven和其他构建工具的SSH客户端。像CVS,Subversion和Git这样的程序也可以通过SSH连接工作。不幸的是,Windows World在不同的时空维度上运行。要在Windows系统上使用SSH,需要第三方软件,如Cygwin。
  • Cygwin :Cygwin是一个奇怪的野兽。它是Windows上的一个层,允许许多Unix / GNU库在Windows上运行。它最初开发是为了允许Unix开发人员在 Windows DOS系统上运行他们的软件。但是,Cygwin现在包含一个完整的类Unix系统,包括Perl和Python等工具,BASH shell以及许多实用程序,如SSH服务器。由于Cygwin是开源的,您可以免费下载并运行SSH服务器。不幸的是,我遇到了Cygwin的SSH服务器问题。另一个问题:如果您正在远程运行程序,您可能希望在Windows环境而不是Cygwin环境中运行它们。

我建议您从Bitvise查看WinSSHD。它是SSH服务器的OpenSSH实现,但它不是开源的。每个许可证大约100美元,您需要在每台服务器上获得许可证。但是,它是一个强大的实现,并具有SSH提供的所有功能。

您可以查看CoSSH这是一个Cygwin实用程序和OpenSSH服务器包。这是免费的,并且都是开源的,但如果您想要一种简单的设置方式,则需要支付Advanced Administrator Console的费用。您不需要高级管理员控制台,因为您可以使用Cygwin设置所有内容,它还附带一个基本控制台来帮助。

答案 1 :(得分:8)

我更喜欢使用cygwin并使用SSH然后登录到Windows机器来执行命令。请注意,默认情况下,cygwin没有安装OpenSSH。

在Windows机器上运行SSH后,可以从Linux机器上运行命令,如下所示:

ssh user@windowsmachine 'mycommand.exe'

您还可以设置ssh authentication键,这样您每次都不需要输入密码。

答案 2 :(得分:1)

我已经成功通过Debian Buster上的EXPECT在W2K3上运行了远程命令。这是我的脚本:

#!/usr/bin/expect
#
# execute the script in the following manner:
#
#      <script>   <vindoze>   <user>  <password>   <command>
#
#
set timeout 200

set hostname [lindex $argv 0]
set username [lindex $argv 1] 
set password [lindex $argv 2]
set command  [lindex $argv 3]

spawn telnet $hostname

expect "login:"
send "$username\r"
expect "password:"
send "$password\r"

expect "C:*"
send "dir c:\\tasks\\logs \r"
# send $command

expect "C:*"
send "exit\r\r\r"

请记住,您需要启用Win计算机的TELNET服务,并且通过身份验证的用户必须是TelnetClients内置Win组的成员。或者像大多数Win LazyMins一样-向Admin用户进行身份验证;)

我使用类似的“期望”脚本来自动收集和备份支持CLI的网络设备,例如Allied Telesyn,Cisco,Planet等。

干杯, LAZA

答案 3 :(得分:-3)

不是一种非常安全的方式,但如果您有一个正在运行的Web服务器,则可以使用PHP或ASP来触发系统命令。只需隐藏www.myserver.com/02124309c9867a7616972f52a55db1b4.php下的thgat脚本。并确保命令是固定的,写在代码中,而不是通过参数打开...