1

我正在尝试在远程 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 查询防火墙策略的方法,这就是使用子进程的原因。

4

2 回答 2

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 - 尝试登录远程服务器时出现密码被拒绝错误

并发送您的 netsh 命令

于 2013-04-15T12:23:35.167 回答
0

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

  1. 安装面料: pip install fabric
  2. 编写以下名为remote_cmd.py的脚本:
"""
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
于 2015-12-20T08:25:33.723 回答