2012-11-29 111 views
2

这次我询问远程Windows计算机上的运行命令。 让我在这里更具描述性。
**我有一台机器上安装了python,我想运行一些powershell和cmd命令,或者我想发送一个cmd文件到远程windows机器,以便它可以在那里运行,并且每个输出都像错误,stdout I可以回到烧机。
就像我想从Python远程管理远程机器。如果可能的话,我可以在多台机器上用python同时远程启动命令。
请记住,其他系统没有安装任何python。 **使用python运行远程Windows机器上的命令

回答

0

您可以尝试使用类似Pyro4subprocess.popen的组合。

Pyro4为远程方法调用的框架,subprocess.popen用于创建底层操作系统进程。

+0

thanx的快速回复,但据我所知pyro4是所有ABT远程调用的python对象,但我的情况是,Python是一个系统上运行和其他系统是不是有python安装。 – skyemperor

2

您可以在Windows机器上安装ssh服务器(我听说freeSSHd很好),然后使用paramiko模块与它通信。

+0

这是我的理解,Windows 10(本月晚些时候发布)将全面支持SSH开箱即用。因此,如果您只能使用Windows 10或更新版本,则可能不需要在其上安装SSH服务器。 (我实际上没有任何运行Windows 10 beta的机器,所以我还没有能够测试这个。) – ArtOfWarfare

+0

微软提供的OpenSSH相当麻烦。最好避免。 @ArtOfWarfare从他们的github页面看来,似乎很多人都有类似的问题。不知道它是否会起作用,但最好的机会是从这里使用一个建议的sshd服务器:https://serverfault.com/questions/8411/what-is-a-good-ssh-server-to-use -on-windows –

+0

@ArtOfWarfare,我还必须在远程Windows机器上执行python脚本。你是如何解决这个问题的? –

1

您可以使用ssh此为khagler建议。但我更喜欢在两边都安装Python,因为Python使我在远程端有了更多的控制权。

例如,ssh只是提供两个计算机之间的单个信道。这意味着我必须在远程端折叠stdoutstderr以通过电线发送。使用远程Python服务器,我可以运行更复杂的脚本,我可以准确控制我想要公开的内容(如果允许远程访问任何命令都可以执行),并且错误处理更简单。

或两者的组合:在远程计算机上安装Python,然后用ssh启动Python脚本。然后,您可以使用自定义协议与其进行通信,而不受命令行/ shell界面的限制。您甚至可以使用scp远程安装新脚本。

+0

我想知道你在Windows上运行的是什么sshserver?实际上,我尝试着使用两种不同的SSH服务器来做同样的事情:微软提供的'mobasshd'和'openSSH'。对于这两个服务器,即使通过手动ssh登录,我也无法执行python脚本。我发布在'serverfault':https://serverfault.com/questions/901041/how-to-run-a-python-script-remotely-via-ssh-on-a-windows-machine –

+0

想知道你是否可以提供你正在使用的库的具体细节? –

3

这是一个有点雷区,但“正确”的方式做到这一点(蟒蛇控制远程胜机无蟒蛇)是使用WMI或水资源管理库。

有一个WMI module by Tim Golden(谁是Windows-on-Windows世界的权威),WSMAN library from Dellpywinrm module。选择你的毒药 - 它们都有自己的弱点(WRM必须在使用之前在服务器上启用,尽管这不需要任何额外的软件,它是全部的Windows; WMI在DCOM上工作,所以你会必须弄清楚DCOM安全等等)。

+0

这听起来像是最好的解决方案。我可以使用这些模块来控制非Windows的Windows服务器,还是依赖只能在Windows上使用的基础机制? – ArtOfWarfare

+0

Tim的WMI模块只是pywin32的一个包装,所以不行,你不能在非windows上使用它。我不知道戴尔的一个(现在看起来被遗弃,顺便说一句)。 WRM本身就是一个基于XML的协议(我认为),所以理论上你可以做很多事情,但实际上它是那些没人想要弄脏的“企业”标准之一。如果你真的想要的话,你可以试着查看流量并重新实现你所需要的功能。 –

+0

WMI是一个禁止使用,仅限于Windows。 WSMAN文档提到它支持Linux ...也许我可以让它在OS X上工作。它支持2.6和更新,并且在2年前更新,所以它在很久以前并没有被放弃。你的'pywinrm模块'链接指向与'来自Dell的WSMAN库'完全相同的地方 - 我认为这是一个错误。我在这里找到了'pywinrm':https://pypi.python.org/pypi/pywinrm/0.0.3。它看起来不错...如果它允许我上传和下载文件,它是完美的。 – ArtOfWarfare

1

知道这是一个很老的帖子,

我能想到的是现在是使用PowerShell的窗口远程管理的最佳选择。

下面是如何使用PowerShell和如何在Python中执行相同的执行在远程计算机的命令。

PowerShell来启动服务:

Get-Service -ComputerName aaa0001 -Name Tomcat9 | Start-Service 

现在,接下来就是如何使用Python执行此,

import subprocess 

subprocess.call(["C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe","Get-Service -ComputerName aaa0001 -Name Tomcat9 | Start-Service"]) 

这个例子显示了如何在Windows启动Tomcat9窗口服务。 (“aaa0001”就是计算机名称)

相关问题