我正在尝试在远程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上的防火墙策略,这就是使用子进程的原因。
答案 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命令的操作,以及辅助功能例如提示正在运行的用户输入或中止执行:
pip install fabric
"""
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