python-实现远程windows机器上传文件和远程执行命令
1. python-实现远程windows机器上传文件和远程执行命令
-
编写上传测试文件
#!/usr/bin/env python3 # _*_ coding: utf-8 _*_ # Author:shichao # File: .py import json def test(): result = { "test": "Uploaded file successfully, executed successfully", } json_data = json.dumps(result) return json_data if __name__ == "__main__": data = test() try: print(data) except Exception as e: result = {'code': 500, 'msg': 'Execution failed'} print(json.dumps(result))
-
编写windows.py文件, 实现远程windows机器上传文件和远程执行命令
#!/usr/bin/env python3 # _*_ coding: utf-8 _*_ # Author:shichao # File: .py import winrm import paramiko import os class windows_ssh(): def __init__(self, ip, username, password): self.ip = ip self.username = username self.password = password def win_command(self, shell): try: wintest = winrm.Session('http://' + self.ip + ':5985/wsman', auth=(self.username, self.password)) ret = wintest.run_cmd(shell) ret = ret.std_out.decode() return {'code':200, 'msg': '执行命令成功', 'data': ret} except Exception as e: return {'code': 500, 'msg': '执行命令失败! 错误信息: %s' % e} def win_scp(self, local_file, remote_file): try: ts = paramiko.Transport(self.ip, 22) # 获取Transport实例,其中22为端口号 ts.connect(username=self.username, password=self.password) # 建立连接 try: # 获取SFTP实例 sftp = paramiko.SFTPClient.from_transport(ts) # 执行上传动作 sftp.put(localpath=local_file, remotepath=remote_file) ts.close() return {'code': 200, 'msg': '上传文件成功'} except Exception as e: return {'code':500, 'msg':'上传文件失败 %s' %e } except Exception as e: return {'code':500, 'msg':'SSH连接失败 %s' %e } # 新增一个远程连接测试方法 def test(self): result = self.win_command('dir') return result if __name__ == '__main__': ssh = windows_ssh("172.16.128.98", "admin", "123456") ssh.test() # 验证是否能连接 local_file = os.path.join(os.getcwd(), 'test.py') # 本地需要上传的文件 ssh.win_scp(local_file, "E:\\test\\test.py") # 执行paramiko上传文件功能 result = ssh.win_command('python E:/test/test.py') # 使用winrm功能进行执行命令 print(result)
-
执行结果