Python操作远程机器
操作远程机器主要使用的有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))
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操作远程机器的更多相关文章
- python3使用paramiko操作远程机器
目标:有A和B两台机器,希望在机器A上操作B上的脚本 解决方法:使用paramiko实现操作远程机器 1.安装paramiko 安装第三方包[pip3 install paramiko] ...
- Python操作远程数据库
我的项目要往数据库中插入create_time和update_time,那就势必要引用现在的系统时间,经过大量的查找,终于发现往python是没有对应时间datetime的相关通配符的,那么我们要怎么 ...
- Python操作远程服务器paramiko模块介绍
paramiko模块是基于Python实现的SSH远程安全连接,可以提供在远程服务器上执行命令.上传文件到服务器或者从指定服务器下载文件的功能. paramiko模块安装方法 paramiko模块不是 ...
- 用python登录远程salt,并执行命令
用python操作saltstack,如果是在本地,则可以用python的salt模块,但如果要操作远程saltstack,则不行,今天就来看看怎么操作. 用python操作远程的saltstack, ...
- 十一天 python操作rabbitmq、redis
1.启动rabbimq.mysql 在""运行""里输入services.msc,找到rabbimq.mysql启动即可 2.启动redis 管理员进入cmd, ...
- Python操作MySQL-day11
写在前面 上课第11天,打卡: 包子有肉,不在褶上: 前言 存储和数据库是整个网站架构的瓶颈 关系型数据库(MySQL | Oracle) 类似于excel表格 用结构化查询语言SQL进行存取的 非关 ...
- python操作rabbitmq、redis
1.启动rabbimq.mysql 在“”运行“”里输入services.msc,找到rabbimq.mysql启动即可 2.启动redis 管理员进入cmd,进入redis所在目录,执行redis- ...
- python的远程调试(使用pycharm)
测试环境描述1:c++调用python,操作系统环境是linux 2:pycharm安装在windows 安装步骤 1:把pycharm-debug.egg上传到linux上面. 2:使用easy_i ...
- 用python做自动化测试--Python实现远程性能监控
http://blog.csdn.net/powerccna/article/details/8044222 在性能测试中,监控被测试服务器的性能指标是个重要的工作,包括CPU/Memory/IO/N ...
随机推荐
- Jquery取得iframe中元素的几种方法Javascript Jquery获取Iframe的元素、内容或者ID
query取得iframe中元素的几种方法 在iframe子页面获取父页面元素代码如下: $('#objId', parent.document);// 搞定... 在父页面 获取iframe子页面的 ...
- 智课雅思词汇---十七、前綴il-, in-, ir-, im-有什麼關係
智课雅思词汇---十七.前綴il-, in-, ir-, im-有什麼關係 一.总结 一句话总结:这几个长得非常像,并且意思也非常像 1.前綴il-, in-, ir-, im-是什麼意思? 前缀:i ...
- wpf 界面平级之间设置上下顺序关系(ZIndex)
只能用于平级之间设置上下顺序 this.grid1.SetValue(Grid.ZIndexProperty, 9999); Panel.SetZIndex(th ...
- JS解析+预解析相关总结
[js预解析机制]先来说说js的解析机制吧,浏览器在解析js代码时是从上到下解析的.解析顺序如:(1)预解析 找var和function (2)逐行代码解析 表达式 函数调用 ...
- mindmanager思维导图软件
Mindjet 由原名 Mindjet MindManager 简化而来,是倍受赞誉.最好的思维导图软件.所谓思维导图实际上就是一种将你的思想具体化,把你的思维分析整理为有计划有条理的导向图的工作管理 ...
- Swift 3.0 on Ubuntu 15.10
一.安装swift 3.0 1. 下载 https://swift.org/download/ 找到swift-3.0 ubuntu 15.10版本下载: https://swift.org/buil ...
- ural 2012 About Grisha N.(水)
2012. About Grisha N. Time limit: 1.0 secondMemory limit: 64 MB Grisha N. told his two teammates tha ...
- selenium-webdirver api-定位方式
1,8种单数定位方式 # 通过ID定位目标元素 driver.find_element_by_id('i1') # 通过className定位目标元素 driver.find_element_by_c ...
- hdoj-1036-Average is not Fast Enough!(水题,坑)
题目链接:Average is not Fast Enough! #include <iostream> #include <cstring> #include <st ...
- Codeforces Round #260(div2)C(递推)
有明显的递推关系: f[i]表示i为数列中最大值时所求结果.num[i]表示数i在数列中出现了几次. 对于数i,要么删i,要么删i-1,只有这两种情况,且子问题还是一样的思路.那么很显然递推一下就行了 ...