• Python_paramiko模块


    paramiko模块安装:pip3 install paramiko

    paramiko模块(模拟SSH),是基于SSH(网络安全协议)用于连接远程服务器并执行相关操作。

    ssh:

    • 基于口令的安全验证
    • 基于密匙的安全验证(非对称加密)

    paramiko常用类:

    • SSHClient类
    • SFTPClient类

    一、SSHClient类


    封装了传输、通道以及SFTPClient的校验、建立方法,通常用于执行命令

    1.connect()方法

         connect(hostname, port=22, username=None,password=None,pkey=None, key_filename=None,timeout=None,allow_agent=True, look_for_keys=True, compress=False)

    参数说明:

    hostname 连接目标主机或主机地址
    port 连接目录的端口,默认为22
    username 用户名
    password 密码
    pkey 私钥方式用户验证
    key_filename 私钥文件名
    timeout 连接超时时间
    allow_agent 是否允许使用ssh代理
    look_for_keys 是否允许搜索私钥文件
    compress 打开时是否压缩                                         

    2.exec_command()方法

        exec_command(command,bufsize = -1)

    参数说明:

    command 执行的指令
    bufsize 文件缓冲区大小,-1为不限制                       

    3.load_system_host_keys()方法

        load_system_host_keys(filename = None)

    参数说明:

    •  filename:指定远程主机的公钥文件,默认为.ssh目录下的know_hosts文件

    4.set_missing_host_key_policy()方法
         set_missing_host_key_policy(paramiko.AutAddPolicy())

    参数说明:

    AutoAddPolicy 自动添加主机名及密钥到本地并保存,不依赖于load_system_host_keys配置,即known_host里没有远程主机的公钥时(连接的新的主机),自动添加为yes
    RejectPolicy 自动拒绝未知主机名和密钥,依赖于load_system_host_keys()
    WarnningPolicy 功能与AutoAddPolicy相同,不过如果是未知主机会提示yes/no

    5.close() :关闭连接

    例:利用paramiko模拟ssh执行命令(Linux系统运行)

    例一、

    #!/usr/bin/python3
    # -*- coding:utf-8 -*- 
    import paramiko
    import sys
    
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())   # 允许连接没连过的主机
    ssh.connect(hostname='localhost',port=22,username='root',password ='123456') # 连接服务
    while True:
        data = input('>>>')
        if data=='exit':break
        stdin, stdout, stderr = ssh.exec_command(data)    # 执行命令
    
        result , err = stdout.read().decode(),stderr.read()
        if not err:
            print(result)
        else:
            print(err)
    ssh.close()
    明文用户密码

    例二、

    #!/usr/bin/python3
    # -*- coding:utf-8 -*-
    
    import paramiko
    private_key = paramiko.RSAKey.from_private_key_file('/路径/id_rsa')  # 指定文件在哪儿
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())   # 允许连接没连过的主机
    ssh.connect(hostname='localhost',port=22,username='root',key = private_key) # 连接服务>器
    while True:
        data = input('>>>')
        if data == 'exit':break
        stdin, stdout, stderr = ssh.exec_command(data)    # 执行命令
    
        result , err = stdout.read(),stderr.read()
        if not err:
            print(result)
        else:
            print(err)
    
    ssh.close()
    基于公钥

    二、SFTPClient类


    根据SSH传输协议的sftp会话,实现远程文件上传、下载等操作.

    1.Transport()方法

          Transport(hostname,port)

    参数说明:

    hostname 主机名或主机地址                     
    port 端口,默认为22

    2.put()方法

          put(localpath, remotepath, callback = None, confirm = True)

    参数说明:

    localpath 上传源文件的本地路径
    remotepath 目标路径
    callback 获取接收的总传输字节数
    confirm 上传完毕后是否调用start()方法,以便确认大小         

    3.get()方法

          get(remotepath, localpath,callback=None)

    参数说明:

    remotepath 需要下载的远程文件
    localpath 本地存储路径
    callback 获取接收的总传输字节数             

    更多方法:

    方法描述
    sftp.getcwd() 返回当前工作目录
    sftp.chdir(path) 改变工作目录
    sftp.chmod(path, mode) 修改权限
    sftp.chown(path, uid, gid) 设置属主属组
    sftp.close() 关闭sftp
    sftp.file(filename, mode=’r’, bufsize=-1) 读取文件
    sftp.from_transport(s) 创建SFTP客户端通道
    sftp.listdir(path=’.’) 列出目录,返回一个列表
    sftp.listdir_attr(path=’.’) 列出目录,返回一个SFTPAttributes列表
    sftp.mkdir(path, mode=511) 创建目录
    sftp.normalize(path) 返回规范化path
    sftp.open(filename, mode=’r’, bufsize=-1) 在远程服务器打开文件
    sftp.put(localpath, remotepath, callback=None) localpath文件上传到远程服务器remotepath
    sftp.get(remotepath, localpath, callback=None) 从远程服务器remotepath拉文件到本地localpath                   
    sftp.readlink(path) 返回一个符号链接目标
    sftp.remove(path) 删除文件
    sftp.rename(oldpath, newpath) 重命名文件或目录
    sftp.rmdir(path) 删除目录
    sftp.stat(path) 返回远程服务器文件信息(返回一个对象的属性)
    sftp.truncate(path, size) 截取文件大小
    sftp.symlink(source, dest) 创建一个软链接(快捷方式)
    sftp.unlink(path) 删除软链接

    例:用paramiko模块模拟ftp上传和下载

    例一、

    #!/usr/bin/python3
    # -*-coding:utf-8 -*-
    
    import paramiko
    transport = paramiko.Transport('127.0.0.0',22)    # 创建实例
    transport.connect(username='root',password='123456')   # 创建链接
    sftp = paramiko.SFTPClient.from_transport(transport)   # 将创建的实例作为参数传给sftp,>交互进行的地方
    sftp.put(r'文件的所处的位置路径/文件名',r'要上传到的地方/文件名')    # 上传
    sftp.get(r'要从哪儿下载文件/文件名',r'文件要存到哪儿/文件名')    # 下载
    
    transport.close()
    明文用户密码

    例二、

    #!/usr/bin/python3
    # -*-coding:utf-8 -*-
    
    import paramiko
    private_key = paramiko.RSAKey.from_private_key_file(r'路径/id_rsa')
    transport = paramiko.Transport('127.0.0.0',22)    # 创建实例
    transport.connect(username='root',pkey=private_key)
    sftp = paramiko.SFTPClient.from_transport(transport)   # 将创建的实例作为参数传给sftp,>交互进行的地方
    sftp.put(r'文件的所处的位置路径/文件名',r'要上传到的地方/文件名')    # 上传
    sftp.get(r'要从哪儿下载文件/文件名',r'文件要存到哪儿/文件名')    # 下载
    
    transport.close()
    基于公钥

    paramiko模块是一个比较强大的ssh连接模块,以上的示例只是列出了该模块的一些简单的使用方法,还可以使用threading模块加块程序并发的速度;也可以使用configparser模块处理配置文件,而我们将所有IP、用户信息操作都放入配置文件;使用setproctitle模块为执行的程序加一个容易区分的title等。

    参考笔记:http://www.cnblogs.com/breezey/p/6663546.html

                      https://www.e-learn.cn/content/python/271181

                      https://blog.csdn.net/cc297322716/article/details/78608283

  • 相关阅读:
    matplotlib笔记(subplot)
    matplotlib笔记(plot)
    [时间序列处理]python中计算日期差
    Ubuntu 16.04 apt-get更换为国内阿里云源
    居然忘了range()的用法
    elasticsearch+kibana使用中踩的坑,持续更新中。
    Elasticsearch+Logstash+Kibana教程
    ubuntu下anaconda从清华镜像的下载安装及配置
    ubuntu 解决node 修改代码不能同步刷新的问题
    ubuntu18.04 解决sublimie不能使用中文
  • 原文地址:https://www.cnblogs.com/Vera-y/p/10034192.html
Copyright © 2020-2023  润新知