远程MS Windows主机上的Python子进程

时间:2013-04-15 11:04:50

标签: python windows subprocess remote-access

我正在尝试在远程Windows主机(具有管理员权限的Windows域环境)上运行netsh命令。以下代码在本地主机上运行正常,但我也想在远程主机上使用python运行它。

import subprocess

netshcmd=subprocess.Popen('netsh advfirewall show rule name=\”all\”', shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE )
output, errors =  netshcmd.communicate()

问题是我不知道如何/用什么方法来启动与远程主机的连接,然后运行子进程命令。我不能使用ssh或pstools,并希望尽可能使用现有的pywin32模块来实现它。

我过去使用过WMI模块,这使得查询远程主机非常容易,但我找不到任何方法来查询WMI上的防火墙策略,这就是使用子进程的原因。

2 个答案:

答案 0 :(得分:1)

首先使用pxssh模块Python: How can remote from my local pc to remoteA to remoteb to remote c using Paramiko

登录远程主机

远程登录Windows:

child = pexpect.spawn('ssh tiger@172.16.0.190 -p 8888')
child.logfile = open("/tmp/mylog", "w")
print child.before
child.expect('.*Are you sure you want to continue connecting (yes/no)?')
child.sendline("yes")

child.expect(".*assword:")
child.sendline("tiger\r")
child.expect('Press any key to continue...')
child.send('\r')
child.expect('C:\Users\.*>')
child.sendline('dir')
child.prompt('C:\Users\.*>')

Python - Pxssh - Getting an password refused error when trying to login to a remote server

并发送您的netsh命令

答案 1 :(得分:0)

我建议使用 Fabric ,它是一个功能强大的python工具,带有一套用于执行本地或远程shell命令的操作,以及辅助功能例如提示正在运行的用户输入或中止执行:

  1. 安装面料:pip install fabric
  2. 编写以下名为 remote_cmd.py 的脚本:
  3. """
    Usage:
        python remote_cmd.py ip_address username password your_command
    """
    
    from sys import argv
    from fabric.api import run, env
    
    
    def set_host_config(ip, user, password):
        env.host_string = ip
        env.user = user
        env.password = password
    
    def cmd(your_command):
        """
        executes command remotely
        """
        output = run(your_command)
        return output
    
    
    def main():
        set_host_config(argv[1], argv[2], argv[3])
        cmd(argv[4]))
    
    if __name__ == '__main__':
        main()
    

    <强>用法:

    python remote_cmd.py ip_address username password command