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)
  • 执行结果
  • python 远程修改文件 python远程执行windows命令_python