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

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

     

  • 相关阅读:
    UVALive 7509 Dome and Steles
    HDU 5884 Sort
    Gym 101194H Great Cells
    HDU 5451 Best Solver
    HDU 5883 The Best Path
    HDU 5875 Function
    卡特兰数
    UVa 11729 Commando War 突击战
    UVa 11292 The Dragon of Loowater 勇者斗恶龙
    Spark Scala Flink版本对应关系
  • 原文地址:https://www.cnblogs.com/lcj0703/p/5747697.html
Copyright © 2011-2022 走看看