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



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

我读了关于Open SSH, linux和cygwin的psexec。但我不知道如何使用这些,他们会解决我的问题。

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

现在我的问题是用什么,哪个更适合我的工作。无论我选择什么都应该由代码执行它可以是shell, ant或php。

提前感谢。

让我们仔细检查一下您提到的各种选项:

  • psexec:这几乎只是一个PC的事情。另外,您必须确保较新的Windows机器可以通过默认设置的UAC。在Vista和Windows 7上,当你试图做一些需要管理员权限的事情时,你会一直看到UAC。你可以尝试一个叫winexe的东西,它是一个Linux程序,可以执行psexec协议,但我有问题让它工作。
  • OpenSSH:有两种主要的SSH风格,而OpenSSH是绝大多数站点使用的一种。与其他方法相比,SSH有几个优点:
    • SSH是安全的:您的网络流量是加密的
    • SSH可以独立于密码:您可以设置SSH使用私钥/公钥。这样,您甚至不需要知道远程服务器上的密码。这使得它更安全,因为你不需要将密码存储在不同的系统上。而且,在许多Windows网站中,密码必须每个月左右更改一次,否则帐户就会被锁定。
    • SSH可以做的不仅仅是执行远程命令:在SSH上有两个子协议称为SCP和SFTP。它们允许您在两台机器之间传输文件。由于它们在SSH上工作,因此您可以获得SSH的所有优点,包括加密数据包和公钥/私钥保护。
    • SSH在Unix World中得到了很好的实现:您会发现SSH客户端内置于Ant、Maven和其他构建工具中。CVS、Subversion和Git等程序也可以在SSH连接上工作。不幸的是,Windows世界在不同的时空维度中运行。在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来设置所有内容,并且它附带了一个基本控制台来提供帮助。

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

一旦你在windows机器上使SSH工作,你可以在Linux机器上运行一个命令,像这样:

ssh user@windowsmachine 'mycommand.exe'

您还可以设置ssh认证密钥,这样您就不需要每次都输入密码。

我已经成功地通过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 "$usernamer"
expect "password:"
send "$passwordr"
expect "C:*"
send "dir c:\tasks\logs r"
# send $command
expect "C:*"
send "exitrrr"

请记住,您需要启用Win机器的TELNET服务,并且您验证的用户必须是TelnetClients内置Win组的成员。或者像大多数Win LazyMins那样,使用Admin用户进行认证;)

我使用类似的"expect"脚本来自动收集&启用CLI的网络设备(如Allied Telesyn、Cisco、Planet等)的备份配置

欢呼,LAZA

不是一个非常安全的方式,但是如果你有一个正在运行的web服务器,你可以使用PHP或ASP来触发系统命令。把脚本隐藏在www.myserver.com/02124309c9867a7616972f52a55db1b4.php或其他地方。并确保命令是固定写入代码,而不是通过参数打开…

相关内容

  • 没有找到相关文章

最新更新