Python操作远程机器,首要行使CIFS合同
分类:计算机编程

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

Windows下的WMI程序

Windows Management Instrumentation(WMI卡塔尔国是Windows驱动程序模型的少年老成组扩充,提供了二个操作系统分界面,通过该分界面,检查实验组件能够提供音信和通报。WMI允许脚本语言(如VBScript卡塔 尔(英语:State of Qatar)在地面和远程管理Microsoft Windows个人计算机和服务器。WMI预安装在Windows Vista,Windows Server 二零零一,Windows XP,Windows Me和Windows 二〇〇二中。

python paramiko

一、安装

[email protected]:~/paramiko# pip install paramiko

测量检验是不是安装成功

 

>>> import paramiko

>>>

二、上传文件到长途服务器

规律:通过SFTPClient类依照SSH传输讨论的sftp会话,完结长途文件上传、下载等操作。完结长途文件上传、下载。

 

职务:10. 1.101.187向10.1.101.186出殡和安葬文书。

 

10.1.101.187 目录/root/paramiko  有五个文件 paramikosend.py  test  test.tar

 

10.1.101.186 目录/root/paramiko   早先为空文件夹

 

施行python paramikosend.py,代码如下

 

 

[email protected]:~/paramiko# cat paramikosend.py 
import paramiko,datetime,os
hostname = '10.1.101.186'
username = 'root'
password = '123456'
port = 22
local_dir = '/root/paramiko'
remote_dir = '/root/paramiko'
try:
        t=paramiko.Transport((hostname,port))
        t.connect(username=username,password=password)
        sftp = paramiko.SFTPClient.from_transport(t)
        files = os.listdir(local_dir)
        for f in files:
                sftp.put(os.path.join(local_dir,f),os.path.join(remote_dir,f))
        t.close()
except Exception:
        print "connect error!"

 

 

 

三、从远程服务器下载文件

规律:通过SFTPClient类依照SSH传输和煦的sftp会话,达成远程文件上传、下载等操作。实现远程文件上传、下载。

 

职分:以后10.1.101.186的/root/paramiko/temp186索引有七个文本,将其下载到10.1.101.187的/root/paramiko/temp187索引。

 

 

 

实施 python paramikoget.py ,代码如下

 

 

[email protected]:~/paramiko# cat paramikoget.py 
import paramiko,datetime,os
hostname = '10.1.101.186'
username = 'root'
password = '123456'
port = 22
local_dir = '/root/paramiko/temp187'
remote_dir = '/root/paramiko/temp186'
try:
        t=paramiko.Transport((hostname,port))
        t.connect(username=username,password=password)
        sftp = paramiko.SFTPClient.from_transport(t)
        files = sftp.listdir(remote_dir) #这里需要注意,列出远程文件必须使用sftp,而不能用os
        for f in files:
                sftp.get(os.path.join(remote_dir,f),os.path.join(local_dir,f))
        t.close()
except Exception:
        print "connect error!"

 

 

 

 

四、推行命令测验

规律:通过SSHClient类实行命令。SSHClient类是SSH服务会话的尖端代表,封装了传输、通道以致SFTPClient的校验、营造艺术,平日用于奉行命令。

 

职责:通过10.1.101.187连选择10.1.101.186,然后进入目录/root/paramiko,创立四个目录lxy。

 

试行python paramikocommand.py,代码如下:

 

 

[email protected]:~/paramiko# cat paramikocommand.py 
#!/usr/bin/python

import paramiko
hostname = '10.1.101.186'
username = 'root'
password = '123456'
port = 22

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=hostname,port=port,username=username,password=password)
stdin, stdout, stderr = ssh.exec_command("cd  /root/paramiko;mkdir lxy")
print stdout.readlines()
ssh.close()

 

 

 

结果:

 

 

 

一声令下中也可以带参数:

 

 

[email protected]:~/paramiko# cat paramikocommand.py 
#!/usr/bin/python

import paramiko
hostname = '10.1.101.186'
username = 'root'
password = '123456'
port = 22
name='testcmd'

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=hostname,port=port,username=username,password=password)
stdin, stdout, stderr = ssh.exec_command("cd  /root/paramiko;mkdir %s" %name)
print stdout.readlines()
ssh.close()

 

 

 

 

Note:exec_command为单个会话,实践到位之后会回去登入时的缺省目录。

 

譬喻实践下边两句。

 

stdin, stdout, stderr = ssh.exec_command("cd  /root/paramiko;mkdir %s" %name)

stdin,stdout,stderr = ssh.exec_command('mkdir haha')

haha目录最后是在缺省的/root目录下新建的,并非/root/paramiko目录。

 

五、python远程实行操作的其他开源模块

fabric:fabric是包裹了paramiko模块来兑现ssh来传输文件的。

 

pexpect:也得以兑现ssh 登入到某些顾客钦赐的主机上,运转某些客户钦点的吩咐

paramiko 一、安装 [email protected]:~/paramiko# pip install paramiko 测验是还是不是安装成功 import paramiko 二、上传文件到长途服务器 原理:通过SFTPClient类根...

Samba服务所使用的端口和磋商: 

paramiko

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

张开WMI服务分界面

在起来-运转,输入services.msc,步向劳动

图片 1

wmi启动.png

开发银行分界面:

图片 2

WMI.png

正文介绍如何行使Python访谈WMI,并假定你已经下载并设置了pywin32扩大模块和WMI Python模块。WMI是基于pywin32库的扩展库,何况洞穿了部分Python友好的分界面,以适应有的时候凌乱的WMI脚本API。pywin32库运营依赖于相应的MSVC情状,同偶尔候,python版本须求与MSVC大器晚成致。

1)Port 137 (UDP) - NetBIOS 名字服务 ; nmbd

2)Port 138 (UDP) - NetBIOS 数据报服务
3)Port 139 (TCP) - 文件和打印共享 ; smbd (基于SMB(Server Message Block)协议,主要在局域网中使用,文件共享协议)
4)Port 389 (TCP) - 用于 LDAP (Active Directory Mode)
5)Port 445 (TCP) - NetBIOS服务在windos 2000及以后版本使用此端口, (Common Internet File System,CIFS,它是SMB协议扩展到Internet后,实现Internet文件共享)

6)Port 901 (TCP) - 用于 SWAT,用于网页管理Samba  

windows系统之间的文件共享协议:NetBEUI(NetBIOS Extend User Interface)协议和IPX/SPX协议

NetBEUI协议是一种短小精悍、通信效率高的广播型协议,安装后不需要进行设置,特别适合于在“网络邻居”传送数据。

NETBEUI缺乏路由和网络层寻址功能,既是其最大的优点,也是其最大的缺点。因为它不需要附加的网络地址和网络层头尾,所以很快并很有效且适用于只有单个网络或整个环境都桥接起来的小工作组环境。

因为不支持路由,所以NETBEUI永远不会成为企业网络的主要协议。NETBEUI帧中唯一的地址是数据链路层媒体访问控制(MAC)地址,该地址标识了网卡但没有标识网络。路由器靠网络地址将帧转发到最终目的地,而NETBEUI帧完全缺乏该信息。

NetBEUI协议主要用于本地局域网中,一般不能用于与其他网络的计算机进行沟通。 

IPX/SPX (Internetwork Packet Exchange/Sequences Packet Exchange,Internet分组交换/顺序分组交换IPX/SPX)是Novell公司的通信协议集。与NetBEUI形成鲜明区别的是IPX/SPX比较庞大,在复杂环境下具有很强的适应性。这是因为IPX/SPX在设计一开始就考虑了网段的问题,因此它具有强大的路由功能,适合于大型网络使用。

IPX主要实现网络设备之间连接的建立维持和终止;SPX协议是IPX的辅助协议,主要实现发出信息的分组、跟踪分组传输,保证信息完整无缺的传输。 其中,IPX协议负责数据包的传送;SPX负责数据包传输的完整性。

LINUX系统之间文件共享 和 LIUNX与WINDOWS系统之间的文件共享:IBM SMB,服务器信息块协议

服务器信息块(SMB)协议是一种IBM协议,用于在计算机间共享文件、打印机、串口等。SMB协议可以用在因特网的TCP/IP协议之上,也可以用在其它网络协议如IPX和NetBEUI之上。


http://blog.csdn.net/wangsifu2009/article/details/6780749

------------------------------------------------------------------------------

安装

pip  install paramiko

连接

连续几天来本地主机:

import wmi
c = wmi.WMI()

后生可畏经是连连其余主机,要求加多该主机名参数:

import wmi
c = wmi.WMI("other_machine")

依照SMB/JCIFS合同的分享文件上传和下载(局域网中国共产党享文件获取文件卡塔 尔(英语:State of Qatar)  

SMB最先是IBM的贝瑞·费根鲍姆(Barry Feigenbaum卡塔尔国研制的,其目标是将DOS操作系统中的本麻芋果件接口“中断13”校订为网络文件系统。后来微软对这么些演化张开了首要变动,那个改动后的版本也是最广泛的本子。微软将SMB合同与它和3Com一同前进的网络管理程序结合在风流洒脱道,并在Windows for Workgroups和新兴的Windows版本中不仅参预新的功力。

CIFS (Common Internet File System) 通用Internet文件系统

 

  在windows主机之间张开网络文件分享是因此选拔微软集团温馨的CIFS服务达成的。 

 

  CIFS 是三个新建议的协商,它使程序能够访谈远程InternetComputer上的公文并要求此Computer的服务。CIFS 使用客户/服务器方式。顾客程序诉求远在服务器上的服务器程序为它提供服务。服务器拿到乞求并回到响应。CIFS是公私的或开放的SMB合同版本,并由Microsoft使用。SMB合同(见最终的名词解释)未来是局域英特网用于服务器文件访谈和打字与印刷的商业事务。象SMB钻探相仿,CIFS在高层运营,而不象TCP/IP合同那样运维在底层。CIFS能够当作是应用程序协议如文件传输公约和超文本传输公约的二个得以达成。

 

  CIFS 能够使您抵达以下效用: 

 

  1.做客服务器当半夏件并读写那么些文件 

 

  2.与别的客户一齐分享一些文件块 

 

  3.在断线时自动回复与网络的连接 

 

  4.用到西欧字符文件名 

 

  平日的话,CIFS使顾客得到比FTP更加好的对文本的垄断。它提供秘密的越来越直白地服务器程序接口,那比使用HTTP契约的浏览器越来越好。CIFS最规范的采用是windows顾客能够从“网络邻居”中找到网络中的别的主机并访谈当中的分享文件夹.

 

  CIFS 是开放的正规还要已经被看成Internet应用程序标准被交付到IETF。

JCIFS是CIFS 在JAVA中的二个完毕,是samba组织担任掩护开辟的八个开源品类,专心于接受java语言对cifs协议的布置和促成。他们将jcifs设计改为叁个整机的,丰富的,具备可增加工夫且线程安全的客商端库。那风度翩翩库能够运用于各样java设想机访谈据守CIFS/SMB网络传输契约的互联网财富。相像于java.io.File的接口格局,在四线程的行事办法下被认证是行得通而易于选取的

Java代码 

  1. package com.smb;  
  2.   
  3. import java.io.BufferedInputStream;  
  4. import java.io.BufferedOutputStream;  
  5. import java.io.File;  
  6. import java.io.FileInputStream;  
  7. import java.io.FileOutputStream;  
  8. import java.io.IOException;  
  9. import java.io.InputStream;  
  10. import java.io.OutputStream;  
  11.   
  12. import jcifs.smb.SmbFile;  
  13. import jcifs.smb.SmbFileInputStream;  
  14. import jcifs.smb.SmbFileOutputStream;  
  15.   
  16. public class Smbtest {  
  17.     /** 
  18.      * 从局域网中国共产党享文件中收获文件并保存在地头磁盘上 
  19.      * @param remoteUrl 分享Computer路线 如:smb//administrator:123456@172.16.10.136/smb/1221.zip  , smb为分享文件 
  20.      * 注:借使平素出现一而再不上,有提醒报错,而且错误音讯是 客商名活密码错误 则纠正分享机器的文本夹选项 查看 去掉分享简单文件夹的对勾就可以。 
  21.      * @param localDir 本地路线 如:D:/ 
  22.      */  
  23.     public static void smbGet(String remoteUrl,String localDir){  
  24.         InputStream in = null;  
  25.         OutputStream out = null;  
  26.         try {  
  27.             SmbFile smbFile = new SmbFile(remoteUrl);  
  28.             String fileName = smbFile.getName();  
  29.             File localFile = new File(localDir File.separator fileName);  
  30.             in = new BufferedInputStream(new SmbFileInputStream(smbFile));  
  31.             out = new BufferedOutputStream(new FileOutputStream(localFile));  
  32.             byte []buffer = new byte[1024];  
  33.             while((in.read(buffer)) != -1){  
  34.                 out.write(buffer);  
  35.                 buffer = new byte[1024];  
  36.             }  
  37.         } catch (Exception e) {  
  38.             e.printStackTrace();  
  39.         }finally{  
  40.             try {  
  41.                 out.close();  
  42.                 in.close();  
  43.             } catch (IOException e) {  
  44.                 e.printStackTrace();  
  45.             }  
  46.         }  
  47.     }  
  48.     /** 
  49.      * 把本地球磁性盘中的文件上传到局域网分享文件下 
  50.      * @param remoteUrl 分享计算机路线 如:smb//administrator:123456@172.16.10.136/smb 
  51.      * @param localFilePath 本地路线 如:D:/ 
  52.      */  
  53.     public static void smbPut(String remoteUrl,String localFilePath){  
  54.         InputStream in = null;  
  55.         OutputStream out = null;  
  56.         try {  
  57.             File localFile = new File(localFilePath);  
  58.             String fileName = localFile.getName();  
  59.             SmbFile remoteFile = new SmbFile(remoteUrl "/" fileName);  
  60.             in = new BufferedInputStream(new FileInputStream(localFile));  
  61.             out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));  
  62.             byte []buffer = new byte[1024];  
  63.             while((in.read(buffer)) != -1){  
  64.                 out.write(buffer);  
  65.                 buffer = new byte[1024];  
  66.             }  
  67.         } catch (Exception e) {  
  68.             e.printStackTrace();  
  69.         }finally{  
  70.             try {  
  71.                 out.close();  
  72.                 in.close();  
  73.             } catch (IOException e) {  
  74.                 e.printStackTrace();  
  75.             }  
  76.         }  
  77.     }  
  78.       
  79.     public static void main(String[] args) {  
  80.         smbPut("smb://administrator:123456@172.16.10.136/smb", "E:/1221.zip");  
  81.         smbGet("smb://administrator:123456@172.16.10.136/smb/1221.zip", "D:/");  
  82.   
  83.     }  
  84.   
  85. }  

 

------------------------------------------------------------------------------

使用

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

查询

wmi模块最司空眼惯的用处正是对系统的新闻进行询问:

import wmi
c = wmi.WMI()
for os in c.Win32_OperatingSystem():
  print os.Caption
'''
输出:
Microsoft Windows 7 旗舰版 
'''

查询磁盘详细新闻:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import wmi

def toGB(size):
    return str(long(size)/1024**3)   "GB"

def disk():
    c = wmi.WMI ()
    #获取硬盘分区
    for physical_disk in c.Win32_DiskDrive ():
        for partition in physical_disk.associators ("Win32_DiskDriveToDiskPartition"):
            for logical_disk in partition.associators ("Win32_LogicalDiskToPartition"):
                print physical_disk.Caption, partition.Caption, logical_disk.Caption

disks = wmi.WMI ().Win32_LogicalDisk ()

disk()

for d in disks:
    print d.Caption,
        "TotalSize:",toGB(d.Size),
        "FreeSize:",toGB(d.FreeSpace),
        "FreeRate:%0.2f%%"%(100.0 * long (d.FreeSpace) / long (d.Size))

连接

有二种方法连接到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:agentdistmachine.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机器之间张开文件分享和打字与印刷的底层左券,甚至经过萨姆ba服务器应用程序与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()

参谋链接

本文由pc28.am发布于计算机编程,转载请注明出处:Python操作远程机器,首要行使CIFS合同

上一篇:洗礼灵魂,协程介绍及焦点示例 下一篇:没有了
猜你喜欢
热门排行
精彩图文
  • 二叉树中度为2的结点
    二叉树中度为2的结点
    int Degree2(BitNode *t){ if(t==null) return 0;if(t-lchild!=nullt-rchild!=null) return 1 Degree2(t-lchild) Degree2(t-rchild);return Degree2(t-lchild) Degree2(t-rchild); } 您可能感兴趣的 非递归先
  • 包的区别
    包的区别
    大家平常在python的模块目录中会看见" __init__.py " 那个文件,那么它终归有啥样功效吗? 类 类的概念在不胜枚举语言中出现,相当轻便驾驭。它将数据和操
  • 开发的进化史,中的发展
    开发的进化史,中的发展
    三、查询集合 本文内容 引入 概述 匿名函数     Lambda 表达式     匿名方法 参看资料 引入 本文在 VS 2008 环境下,阐述自己对 Lambda 表达式、匿名函数、
  • 0A_Windows下相同的时候设置Python2和Python3
    0A_Windows下相同的时候设置Python2和Python3
    Gerapy是贰个Scrapy布满式管理模块,本节就来介绍一下它的设置方式。 Last login: Tue May 16 21:05:34 on console➜ ~ brew updatezsh: command not found: brew➜ ~ ruby -e "$(curl -
  • python__系列化模块,各个模块的洗练计算
    python__系列化模块,各个模块的洗练计算
    数量长久化的方法有:   什么样叫种类化——将原先的字典、列表等内容转换到一个字符串的经过就称为 序列化 。 1.平凡文书无格式写入:将数据直接写