2013-04-15 1 views
1

Я пытаюсь запустить команду netsh на удаленных хостах Windows (среда домена Windows с правами администратора). Следующий код отлично работает на локальном хосте, но я хотел бы запустить его и на удаленных хостах, используя python.Подпроцесс Python на удаленном узле MS Windows

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, и именно поэтому с помощью подпроцесса.

+0

Смотрите второй ответ на [этот вопрос] (http://stackoverflow.com/questions/861148/how-can-i-remotely-execute-a-script-in-windows) –

ответ

1

Сначала вы войти в машину удаленного хоста использованием pxssh модулей Python: How can remote from my local pc to remoteA to remoteb to remote c using Paramiko

удаленного входа в систему окон:

child = pexpect.spawn('ssh [email protected] -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 команду

+0

Reegan благодарит за ответ, но я не уверен, как это будет работать в среде MS Windows. psexpect, похоже, работает с использованием ssh, но, как я сказал ранее, использование ssh не является обязательным, и вся аутентификация должна работать с использованием обычных методов проверки доменов Windows. Я написал другие сценарии в прошлом, чтобы управлять окнами Windows и примерами строк, используемых для подключения к удаленному хосту, и надеялся, что я могу использовать его в модулях pywin32. с = wmi.WMI (имя хоста) или с = win32evtlog.OpenEventLog (имя хоста, LOGTYPE) . – Ray

0

Я рекомендую использовать Fabric, это мощный Python инструмент с набором операций для выполнения локальных или удаленных команд оболочки, а также вспомогательные функции, такие, как побуждая данные пользователя для ввода или прерывании исполнение:

  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 
Смежные вопросы