zoukankan      html  css  js  c++  java
  • Python之paramiko基础

    一、Paramiko模块

      paramiko是一个自由和开放源码模块使用,实现SSH2协议安全(认证和加密)连接到远程计算机.

    二、windwos下安装paramiko模块

    #在DOS命令行执行如下命令
    pip3 install paramiko
    

     三、在centos下安装paramiko模块

      1)下载paramiko安装包:

      https://pypi.python.org/packages/source/p/paramiko/paramiko-1.14.0.tar.gz

      2)解压缩文件

      tar -xzf paramiko-1.14.0.tar.gz
    
      cd paramiko-1.14.0
    
      执行命令:
    
      python setup.py install
    
      安装完成后进入到demos目录中运行如下命令检测安装结果:
    
      python demo.py localhost
    

       可能出现问题:  http://www.cnblogs.com/hyli/p/3910585.html

    3、可能出现的问题
    a.ImportError: No module named ecdsa
      解决办法:
      下载安装包:https://pypi.python.org/packages/source/e/ecdsa/ecdsa-0.11.tar.gz#md5=8ef586fe4dbb156697d756900cb41d7c
      cd ecdsa-0.11
    
      解压缩:
      tar -xzf ecdsa-0.11.tar.gz
      python setup.py install
    b.ImportError: No module named Crypto.PublicKey
    
      解决办法:
      yum -y install pycrypto
    

     四、paramiko简单使用

      1)SSHClient:用于连接远程服务器并执行基本命令

      基于用户名和密码进行连接

      stdout -- 标准输出设备 (printf("..")) 同 stdout。 
      stderr -- 标准错误输出设备 
      两者默认向屏幕输出。 
      但如果用转向标准输出到磁盘文件,则可看出两者区别。stdout输出到磁盘文件,stderr在屏幕。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author:lcj
    import paramiko
    #创建SSH对象
    ssh = paramiko.SSHClient()
    #允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    #连接服务器
    ssh.connect(hostname="192.168.1.104",port = 22,username='lcj',password='123123')
    #执行操作:
    stdin,stdout,stderr = ssh.exec_command('ls')
    #获取执行结果
    result = stdout.read()
    print(result)
    #关闭连接
    ssh.close()
    

       2)分装用户和密码连接执行命令   

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author:lcj
    import paramiko
    #链接服务器
    transport = paramiko.Transport(('192.168.1.152',22))
    transport.connect(username='xiaoluo',password='123456')
    #创建SSH对象
    ssh = paramiko.SSHClient()
    ssh._transport = transport #将链接对象引用给ssh进行连接
    #执行操作:
    stdin,stdout,stderr = ssh.exec_command('du')
     #获取执行结果
    print(stdout.read())
     #关闭连接
    transport.close()
    

       3)基于公钥秘钥连接   

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author:lcj
    import paramiko
    
    private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')#私钥路径
    
    # 创建SSH对象
    ssh = paramiko.SSHClient()
    # 允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 连接服务器
    ssh.connect(hostname='192.168.1.152', port=22, username='xiaoluo', key=private_key)
    
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command('df')
    # 获取命令结果
    result = stdout.read()
    print(result)
    
    # 关闭连接
    ssh.close() 
    SSHClient封装Transport

      SFTPClient

      用于连接远程服务器并执行上传下载

      1)基于用户名和密码上传下载

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author:lcj
    import paramiko
    #创建paramiko与服务器之间链接
    transport = paramiko.Transport(('192.168.1.152',22))
    transport.connect(username='root',password='123456')
    #创建传输通道
    sftp = paramiko.SFTPClient.from_transport(transport)
    # paramiko001.py 上传至服务器 /home/ww.py  修改文件名为:ww.py
    # sftp.put('paramiko001.py', '/home/ww.py')
    # 将remove_path 下载到本地 local_path
    sftp.get('/home/ww.py', 'local_path')
    #关闭连接
    transport.close()
    

       2)基于公钥密码上传下载:  

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author:lcj
    import paramiko
    #创建公钥:/home/auto/.ssh/id_rsa公钥路径
    private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
    #建立与服务器链接
    transport = paramiko.Transport(('192.168.1.152',22))
    transport.connect(username='root',pkey=private_key)
    #建立文件传输管道
    sftp = paramiko.SSHClient.from_transport(transport)
    # 将location.py 上传至服务器 /tmp/test.py
    sftp.put('paramiko001.py', '/tmp/test.py')
    # 将remove_path 下载到本地 local_path
    # sftp.get('remove_path', 'local_path')
    #关闭连接
    transport.close()
    

     

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author:lcj
    import paramiko
    import uuid
    #创建SSH对象
    class SSHConnection(object):
        #连接服务器,并将信息保存至内存中
        def __init__(self, host='192.168.1.152', port=22, username='xiaoluo',pwd='123456'):
            self.host = host
            self.port = port
            self.username = username
            self.pwd = pwd
            self.__k = None
    
        def run(self):
            self.connect()
            pass
            self.close()
    
        def connect(self):
            transport = paramiko.Transport((self.host,self.port))
            transport.connect(username=self.username,password=self.pwd)
            self.__transport = transport
    
        def close(self):
            self.__transport.close()
    
        def cmd(self, command):
            ssh = paramiko.SSHClient()
            ssh._transport = self.__transport
            # 执行命令
            stdin, stdout, stderr = ssh.exec_command(command)
            # 获取命令结果
            result = stdout.read()
            return result
        #创建上传下载函数
        def upload(self,local_path, target_path):
            # 连接,上传
            sftp = paramiko.SFTPClient.from_transport(self.__transport)
            # 将location.py 上传至服务器 /tmp/test.py
            # sftp.put('fort-KEY.py', target_path)
            sftp.put('fort-KEY.py', '/home/xiaoluo/dd.py')
    # sftp.get('')
    ssh = SSHConnection()
    ssh.connect()
    
    r1 = ssh.cmd('df')
    print(r1)
    #将文件paramiko001.py上传至/home/xiaoluo/ff.py并修改文件为ff.py
    ssh.upload('paramiko001.py', "/home/xiaoluo/fc.py")
    
    #关闭连接
    ssh.close()
    demo

    多线程执行批量主机执行命令(等待更新)

     

  • 相关阅读:
    雪花算法解决的问题
    ServiceStack6000次限制破解
    电商 详情页面 nginx 配置 优先请求静态页,若没有请求动态页,同时生成静态页
    docker 使用汇总
    .net 5 新特性 -- EFCoreDBFirst 介绍 和 .NET5 AOP 5个Filter
    模板方法设计模式:定义抽象类-模板:定义业务流程,执行步骤--》各业务类继承抽象类,实现各自不同 具体的执行步骤
    通过代理模式(包一层),实现对业务增加功能如日志,异常处理,缓存结果,到达不破坏原有的业务代码,扩展了功能
    设计模式
    mongodb 基本操作(增删改查),事务,数据失效机制
    log4net.Config
  • 原文地址:https://www.cnblogs.com/lcj0703/p/5747697.html
Copyright © 2011-2022 走看看