操作远程机器主要使用的有paramiko,WMI(Windows Management Instrumentation),SMBConnection.

paramiko

paramiko使用SSH2协议操作远程机器,是Python语言写的一个模块。

安装

pip  install paramiko

使用

使用主要包括执行命令,上传文件和下载文件。

连接

有两种方式连接到linux服务器。

方式一:

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("某IP地址",22,"用户名", "口令")

方式二:

t = paramiko.Transport(("主机","端口"))
t.connect(username = "用户名", password = "口令")

如果连接远程主机需要提供密钥,上面第二行代码可改为:

t.connect(username = "用户名", password = "口令", hostkey="密钥")

执行命令

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("某IP地址",22,"用户名", "口令")
stdin, stdout, stderr = ssh.exec_command("你的命令")
print stdout.readlines()
ssh.close()

上传文件

import paramiko

t = paramiko.Transport(("主机","端口"))
t.connect(username = "用户名", password = "口令")
sftp = paramiko.SFTPClient.from_transport(t)
remotepath=’/var/log/system.log’
localpath=’/tmp/system.log’
sftp.put(localpath,remotepath)
t.close()

下载文件

import paramiko

t = paramiko.Transport(("主机","端口"))
t.connect(username = "用户名", password = "口令")
sftp = paramiko.SFTPClient.from_transport(t)
remotepath=’/var/log/system.log’
localpath=’/tmp/system.log’
sftp.get(remotepath, localpath)
t.close()

参考链接

WMI

WMI(Windows Management Instrumentation)用于管理windows机器。以下实例功能是执行远程机器的bat文件。

import wmi

# 远程执行bat文件
def call_remote_bat(ipaddress, username, password):
try:
pythoncom.CoInitialize()
# 用wmi连接到远程服务器
c = wmi.WMI(computer=ipaddress, user=username, password=password)
filename = r"C:\auto_login.bat" # 此文件在远程服务器上
# filename = r"C:\agent\dist\machine.exe" # 此文件在远程服务器上
cmd_callbat = r"cmd /c call %s" % filename
c.Win32_Process.Create(CommandLine=cmd_callbat) # 执行bat文件 Win32_Process.Create
time.sleep(1)
except:
print('{}远程执行失败'.format(ipaddress))

参考链接:wmi教程,wmi实例

pysmb

pysmb是客户端SMB /CIFS协议(SMB1和SMB2)的纯Python实现,它是便于在Windows机器之间进行文件共享和打印的底层协议,以及通过Samba服务器应用程序与Linux机器进行文件共享和打印。

  • 使用pip安装即可:pip install pysmb
  • 需安装Twisted依赖包: pip install Twisted

简单使用

创建一个访问对象,并建立连接.

from smb.SMBConnection import *

# username: 远程主机用户名  password: 远程主机密码
# my_name: 本机主机计算机名 remote_name: 远程主机计算机名
# ip: 远程主机ip
conn = SMBConnection(username, password, my_name, remote_name)
conn = conn.connect(ip)

常用方法。

  • servuce_name: 共享文件夹的名称
  • path: 新文件夹(相对于)共享文件夹的路径。如果路径包含非英文字符,则必须使用unicode字符串来传递路径。
  • timeout: pysmb将等待的秒数。
  • file_obj: 具有写入方法的类文件对象。

1. 创建新目录。

conn.createDirectory(service_name,path)

2. 删除空文件夹。

conn.deleteDirectory(service_name,path)

3. 删除文件。

conn.deleteFiles(service_name,path_file_pattern,timeout=30)

4. 重命名文件或文件夹。

# old_path: 旧文件名  new_path: 新文件名
conn.rename(service_name,old_path,new_path)

5. 获取远程主机的共享资源列表。

file_list = conn.listShares(timeout = 30)
# 遍历获取共享文件名
for file in file.list:
print(file.name)

6. 上传文件到远程主机。

conn.storeFile(service_name,path,file_obj, timeout=30)

实例

from smb.SMBConnection import *

def send_file(username, password, my_name, remote_name, ip, file_dir, file_dir_remote):
"""
pysmb下发脚本
:param username: 远程主机用户名
:param password: 远程主机密码
:param my_name: 本地计算机名
:param remote_name: 远程计算机名
:param ip: 远程ip
:param file_dir: 要传输的文件夹本地地址
:param file_dri_remote: 上传位置相对于c盘的路径
:return:
"""
try:
# 创建pysmb访问对象
conn = SMBConnection(username, password, my_name, remote_name)
# 创建pysmb连接
conn.connect(ip)
# 提取文件名或目录正则
pattern = re.compile(r'.*/(.*)')
# 读取文件对象
file_obj = open(file_dir, 'rb')
# 远程文件名
file_name = file_dir_remote + pattern.search(file_dir).group(1)
# 传输文件到远程主机
conn.storeFile('C$', file_name, file_obj)
file_obj.close()
except:
print('{}远程传输文件失败'.format(ip))
time.sleep(1)
call_remote_bat(ip, username, password)
try:
conn.deleteFiles('C$', file_name)
except:
print('{}远程删除文件失败'.format(ip))
conn.close()

参考链接

Python操作远程机器的更多相关文章

  1. python3使用paramiko操作远程机器

    目标:有A和B两台机器,希望在机器A上操作B上的脚本   解决方法:使用paramiko实现操作远程机器   1.安装paramiko   安装第三方包[pip3 install paramiko] ...

  2. Python操作远程数据库

    我的项目要往数据库中插入create_time和update_time,那就势必要引用现在的系统时间,经过大量的查找,终于发现往python是没有对应时间datetime的相关通配符的,那么我们要怎么 ...

  3. Python操作远程服务器paramiko模块介绍

    paramiko模块是基于Python实现的SSH远程安全连接,可以提供在远程服务器上执行命令.上传文件到服务器或者从指定服务器下载文件的功能. paramiko模块安装方法 paramiko模块不是 ...

  4. 用python登录远程salt,并执行命令

    用python操作saltstack,如果是在本地,则可以用python的salt模块,但如果要操作远程saltstack,则不行,今天就来看看怎么操作. 用python操作远程的saltstack, ...

  5. 十一天 python操作rabbitmq、redis

    1.启动rabbimq.mysql 在""运行""里输入services.msc,找到rabbimq.mysql启动即可 2.启动redis 管理员进入cmd, ...

  6. Python操作MySQL-day11

    写在前面 上课第11天,打卡: 包子有肉,不在褶上: 前言 存储和数据库是整个网站架构的瓶颈 关系型数据库(MySQL | Oracle) 类似于excel表格 用结构化查询语言SQL进行存取的 非关 ...

  7. python操作rabbitmq、redis

    1.启动rabbimq.mysql 在“”运行“”里输入services.msc,找到rabbimq.mysql启动即可 2.启动redis 管理员进入cmd,进入redis所在目录,执行redis- ...

  8. python的远程调试(使用pycharm)

    测试环境描述1:c++调用python,操作系统环境是linux 2:pycharm安装在windows 安装步骤 1:把pycharm-debug.egg上传到linux上面. 2:使用easy_i ...

  9. 用python做自动化测试--Python实现远程性能监控

    http://blog.csdn.net/powerccna/article/details/8044222 在性能测试中,监控被测试服务器的性能指标是个重要的工作,包括CPU/Memory/IO/N ...

随机推荐

  1. shitf+tab

    在eclipse中,shitf+tab可以使代码向左移动.

  2. 考虑 PHP 5.0~5.6 各版本兼容性的 cURL 文件上传

    最近做的一个需求,要通过PHP调用cURL,以multipart/form-data格式上传文件.踩坑若干,够一篇文章了. 重要警告 没事不要读PHP的官方中文文档!版本跟不上坑死你! 不同版本PHP ...

  3. Swift中如何使用 #if DEBUG

    Swift暂时还不支持大多数的预处理宏操作,但是可以支持“#if/#else/#endif”语句. 下面进行简单的设置使 #if DEBUG 有效,更详细的内容见:http://stackoverfl ...

  4. RK30SDK开发板驱动分析(一):platform device 的概念与注册

    做过51单片机或者ARM开发的人都知道,单片机内部都有自己的“片内外设”,比如UART,比如I2C,比如SPI等等... 写单片机程序的时候,比如对于UART的驱动,我们都是在程序中直接写一套函数,来 ...

  5. 【.Net】Byte,Stream,File的转换

    引言      文件的传输和读写通常都离不开Byte,Stream,File这个类,这里我简单封装一下,方便使用. 帮助类     public static class FileHelper { / ...

  6. LeetCode OJ:Serialize and Deserialize Binary Tree(对树序列化以及解序列化)

    Serialization is the process of converting a data structure or object into a sequence of bits so tha ...

  7. Linux-压缩与解压缩命令

    常用的压缩格式:.zip   .gz   .bz2   .tar.gz   .tar.bz2 1.Zip 压缩文件:zip 压缩文件名  源文件 压缩目录:zip -r 压缩文件名 源文件 解压缩.z ...

  8. 如何使用FlashFXP上传网站程序?

    查看ftp信息 [登陆,www.jinlida.cn ,单击主机管理,即可看到ftp主机地址,ftp账号和密码,注意ftp端口号] 1.请先下载并安装FlashFXP_4.1.8.1700-Speci ...

  9. 通过ifreme实现文件上传

    模板页面添加ifreme <div style=' display: none;' >      <iframe name ="uploadResponse_attachm ...

  10. Express+Mongoose(MongoDB)+Vue2全栈微信商城项目全记录(二)

    用mogoose搭建restful测试接口 接着上一篇(Express+Mongoose(MongoDB)+Vue2全栈微信商城项目全记录(一))记录,今天单独搭建一个restful测试接口,和项目前 ...