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

    一. 简介

      paramiko 是一个基于SSH用于连接远程服务器并执行相关操作(SSHClient和SFTPClient,即一个远程连接,一个是上传下载服务),使用该模块可以对远程服务器进行命令或文件操作

    二. 使用

     1. 下载安装

    1 #安装pip
    2 wget --no-check-certificate  https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz
    3 tar -xf pip-9.0.1.tar.gz
    4 cd pip-9.0.1
    5 python setup.py build
    6 python setup.py install
    7 # pycrypto 由于paramiko 模块内部依赖pycrypto, 所以先下载安装pycrypto
    8 pip3 install pycryto
    9 pip3 install paramiko

    SSHClient:

    远程链接分为两种:(1)基于用户名密码连接 (2)基于公钥密钥连接 通过是用paramiko远程操作 其实本质也分两种

    (1) 只用SSHClient (2) 自己创建一个transport

    基于用户名和密码连接
     1 #-*- coding:utf-8 -*-
     2 import paramiko
     3 #创建SSH对象
     4 ssh = paramiko.SSHClient()
     5 #允许连接不在know_hosts文件中的主机  //连接主机的IP地址不在know_hosts文件中是拒绝连接的。以linux为例know_hosts 文件在 当前用户家目录.ssh目录中
     6 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
     7 #连接服务器
     8 ssh.connect(hostname="IP",username="public",port=60022,password="1234qwer!@#$")
     9 # 标准输入,标准输出,错误输出。  只用标准输出和错误输出有结果
    10 stdin,stdout,stderr = ssh.exec_command("df")  #执行命令
    11 #获取命令执行结果
    12 result = stdout.read()
    13 #打印执行结果到终端上, 因为传输的是bytes类型 需要坐下格式转换
    14 print(result.decode())  #另外一种写法 print(str(result,"utf-8"))   linux平台默认 utf-8 转换成的bytes类型   
    15 #关闭SSH连接
    16 ssh.close()
    SSHClient 封装Transport
    1 #-*- coding:utf-8 -*-
    2 import paramiko
    3 transport = paramiko.Transport(("222.73.236.179",60022))
    4 transport.connect(username="public",password="1234qwer!@#$")
    5 ssh = paramiko.SSHClient()
    6 ssh._transport = transport
    7 stdin,stdout,stderr = ssh.exec_command("ls")
    8 result = stdout.read()
    9 print(result.decode())
    SShClient  基于密钥连接
     1 import os,paramiko
     2 default_key = os.path.join(os.environ['HOME'],".ssh","id_rsa")  #获取当前用户的私钥
     3 private_key = paramiko.RSAKey.from_private_key_file(default_key)
     4 # 创建SSH对象
     5 ssh = paramiko.SSHClient()
     6 # 允许连接不在know_hosts文件中的主机
     7 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
     8 # 连接服务器
     9 ssh.connect(hostname='IP', port=60022, username='public', pkey=private_key)
    10 # 执行命令
    11 stdin, stdout, stderr = ssh.exec_command('df')
    12 # 获取命令结果
    13 result = stdout.read()
    14 # 关闭连接
    15 ssh.close()
    SFTPClient  用于连接远程服务器并进行上传下载功能

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

     1 #(1)基于用户名密码上传下载)
     2   import paramiko
     3 2 transport = paramiko.Transport(("IP",60022))
     4 3 transport.connect(username="public",password="1234qwer!@#$")
     5 4 SFTP=paramiko.SFTPClient.from_transport(transport)
     6 5 SFTP.get("/home/public/copy.py","E:\ISO\copy2.py")
     7 #将/home/public/copy.py   下载到本地 E:\ISO\ 并重复名copy2.py
     8 6 SFTP.put("E:\ISO\copy2.py","/home/public/copy2.py")
     9 #将本地 E:\ISO\copy2.py  上传到服务器端/home/public/copy2.py
    10 7 transport.close()
    11 
    12 #(2)基于密钥上传下载
    13 default_key = os.path.join(os.environ['HOME'],".ssh","id_rsa")
    14 private_key = paramiko.RSAKey.from_private_key_file(default_key)
    15 transport = paramiko.Transport(("222.73.236.179",60022))
    16 transport.connect(username="public",pkey=private_key)
    17 SFTP=paramiko.SFTPClient.from_transport(transport)
    18 SFTP.get("/home/public/copy.py","E:\ISO\copy2.py")
    19 SFTP.put("E:\ISO\copy2.py","/home/public/copy2.py")
    20 transport.close()

    Demo: 实现远程命令执行和文件上传

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 import paramiko
     4  
     5 class SSHConnection(object):
     6  
     7     def __init__(self, host='192.168.12.68', port=22, username='locojoy',pwd='123321QQ!'):
     8         self.host = host
     9         self.port = port
    10         self.username = username
    11         self.pwd = pwd
    12         self.__k = None
    13  
    14     def run(self):
    15         self.connect()  # 连接远程服务器
    16         self.upload('db.py','/tmp/1.py')  # 将本地的db.py文件上传到远端服务器的/tmp/目录下并改名为1.py
    17         self.cmd('df')  # 执行df 命令
    18         self.close()    # 关闭连接
    19  
    20     def connect(self):
    21         transport = paramiko.Transport((self.host, self.port))
    22         transport.connect(username=self.username, password=self.pwd)
    23         self.__transport = transport
    24  
    25     def close(self):
    26         self.__transport.close()
    27  
    28     def upload(self,local_path,target_path):
    29         sftp = paramiko.SFTPClient.from_transport(self.__transport)
    30         sftp.put(local_path,target_path)
    31  
    32     def cmd(self, command):
    33         ssh = paramiko.SSHClient()
    34         ssh._transport = self.__transport
    35         # 执行命令
    36         stdin, stdout, stderr = ssh.exec_command(command)
    37         # 获取命令结果
    38         result = stdout.read()
    39         print(result)
    40         return result
    41  
    42 obj = SSHConnection()
    43 obj.run()
    View Code
  • 相关阅读:
    机器学习之sigmoid函数
    linux时间校对
    Lumen5.7快速实现Captcha图片验证码功能
    莫烦python教程地址
    获得用户的真实ip HTTP_X_FORWARDED_FOR
    grep日志去重
    asio的网络通讯代码练手
    my simplest kv db
    c++11 线程池学习笔记 (二) 线程池
    c++11 线程池学习笔记 (一) 任务队列
  • 原文地址:https://www.cnblogs.com/simple001/p/7454248.html
Copyright © 2011-2022 走看看