zoukankan      html  css  js  c++  java
  • paramiko模块

    一、paramiko简介

    paramiko是基于Python实现用于做远程控制的第三方模块,使用该模块可以对远程服务器进行命令或文件操作,支持认证及密钥方式,自动化运维管理工具fabric和ansible内部的远程管理功能就是使用paramiko来现实的。

    官网地址:https://pypi.python.org/pypi/paramiko  

    目前最新版本是2.0.0 

    二、paramiko安装  

      paramiko支持pip、easy_install或源码安装方式,推荐使用pip安装paramiko 

      1、在pycharm中使用pip安装paramiko (Python3中需要先升级pip到8.1.2版本   升级命令:pip install --upgrade pip)

      下图是安装完成之后的截图。

        

      2、在CentOS6.6中使用pip安装paramiko

      pip3 install paramiko   

      安装过程中报错:

      

      解决办法:  yum install libffi libffi-devel

      

      检验安装结果,导入模块没有提示异常则说明安装成功:

      

    三、paramiko的核心组件

      paramiko包含两个核心组件,分别是SSHClient类和SFTPClient类。

      SSHClient

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

      基于用户名密码连接   

    #!/usr/bin/python3
    # -*- coding:utf-8 -*-
    
    import paramiko
    import sys
    
    # 创建SSH对象
    ssh = paramiko.SSHClient()
    # 允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 连接服务器
    ssh.connect(hostname='192.168.65.246', port=22, username='root', password='123,.abc')
    
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command(sys.argv[1])
    # 获取命令结果
    result,err = stdout.read(),stderr.read()
    if not err:
        print(str(result,'utf-8'))
    else:
        print(err)
    
    # 关闭连接
    ssh.close() 
     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 
     4 import sys
     5 import paramiko
     6 
     7 transport = paramiko.Transport(('192.168.65.246', 22))
     8 transport.connect(username='root', password='123,.abc')
     9 
    10 ssh = paramiko.SSHClient()
    11 ssh._transport = transport
    12 
    13 stdin, stdout, stderr = ssh.exec_command(sys.argv[1])
    14 
    15 result = list(filter(lambda x: x is not None,[stdout.read(),stderr.read()]))[0]
    16 print(str(result,'utf-8'))
    17 
    18 transport.close()
    SSHClient 封装 transport

      基于公钥密钥连接 

    #!/usr/bin/python3
    # -*- coding:utf-8 -*-
    
    import paramiko
    import sys
    
    private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')
    
    # 创建SSH对象
    ssh = paramiko.SSHClient()
    # 允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 连接服务器
    ssh.connect(hostname='192.168.65.246', port=22, username='root', pkey=private_key)
    
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command(sys.argv[1])
    # 获取命令结果
    result,err = stdout.read(),stderr.read()
    if not err:
        print(str(result,'utf-8'))
    else:
        print(err)
    
    # 关闭连接
    ssh.close() 
     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 
     4 import paramiko
     5 import sys
     6 
     7 private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')
     8 
     9 transport = paramiko.Transport(('192.168.65.246', 22))
    10 transport.connect(username='root', pkey=private_key)
    11 
    12 ssh = paramiko.SSHClient()
    13 ssh._transport = transport
    14 
    15 stdin, stdout, stderr = ssh.exec_command(sys.argv[1])
    16 result = list(filter(lambda x: x is not None,[stdout.read(),stderr.read()]))[0]
    17 print(str(result,'utf-8'))
    18 
    19 transport.close()
    SSHClient 封装 transport

      SFTPClient

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

      基于用户名密码上传下载  

    #!/usr/bin/python3
    # -*- coding:utf-8 -*-
    
    import paramiko
    import sys
    
    transport = paramiko.Transport(('192.168.65.246',22))
    transport.connect(username='root',password='123,.abc')
    
    sftp = paramiko.SFTPClient.from_transport(transport)
    # 将location.py 上传至服务器 /tmp/test.py
    sftp.put('/data/pyscripts/miyao.py', '/root/miyao.py')
    # 将remove_path 下载到本地 local_path
    sftp.get('/root/miyao.py', '/root/miyao.py')
    
    transport.close()
    

      基于公钥密钥上传下载

     1 #!/usr/bin/python3
     2 # -*- coding:utf-8 -*-
     3 
     4 import paramiko
     5  
     6 private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')
     7  
     8 transport = paramiko.Transport(('192.168.65.246', 22))
     9 transport.connect(username='root', pkey=private_key )
    10  
    11 sftp = paramiko.SFTPClient.from_transport(transport)
    12 # 将location.py 上传至服务器 /tmp/test.py
    13 sftp.put('/data/pyscripts/sftp.py', '/root/test.py')
    14 # 将remove_path 下载到本地 local_path
    15 sftp.get('/root/test.py', '/root/sftp.py')
    16  
    17 transport.close()
    View Code

    注:代码中的主机均为VM虚拟机。

      

    运维因自动化而有趣!
  • 相关阅读:
    MySql 范式
    MySql 多表关系
    MySql 约束条件
    MySql 枚举和集合 详解
    【RoR win32】新建rails项目找不到script/server的解决办法
    【RoR win32】安装RoR
    【RoR win32】提高rails new时bundle install运行速度
    【bs4】安装beautifulsoup
    【py分析网页】可能有用的-re去除网页上的杂碎
    【pyQuery】抓取startup news首页
  • 原文地址:https://www.cnblogs.com/Rambotien/p/5560925.html
Copyright © 2011-2022 走看看