python 使用paramiko模块进行封装,远程操作linux主机的示例代码


Posted in Python onDecember 03, 2020
import time
import paramiko


class HandleParamiko:
  '''
  定义一个linux处理类
  '''

  def __init__(self, hostname, password, port=22, username='root'):
    '''
    构造器
    :param hostname: 主机ip,type:str
    :param password: 密码,type:str
    :param port: 端口,type:int 默认22
    :param username: 用户名,type:str
    :return:
    '''
    self.t = None
    self.sftp = None
    self.hostname = hostname
    self.password = password
    self.port = port
    self.username = username
    self.client = paramiko.SSHClient() # 实例化SSHclient
    self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 自动添加策略,保存服务器的主机名和密钥信息
    try:
      self.client.connect(hostname=hostname,
                port=port,
                username=username,
                password=password)
    except Exception as all:
      print(f"连接异常,请确认参数是否有误:{all}")
    self.channel = self.client.invoke_shell() # 创建一个交互会话的对象

  def sftp_client(self):
    '''
    创建一个sftp上传下载客户端
    :return: sftp对象,调用put()和get()分别实现文件的上传和下载
    '''
    try:
      self.t = paramiko.Transport((self.hostname, self.port))
      self.t.connect(username=self.username, password=self.password)
      self.sftp = paramiko.SFTPClient.from_transport(self.t)
      return self.sftp
    except FileNotFoundError as e:
      print(f"FileNotFoundError:{e}")

  def cmd_res(self, cmd, get_way='out'):
    '''
    定义一个一次性会话方法(优点:响应速度快,缺点:不能保持会话)
    :param cmd: linux命令,type:str
    :param get_way: 支持:‘in'、‘out'、‘err'三种方式
    :return: 回显结果
    '''
    stdin, stdout, stderr = self.client.exec_command(cmd)
    if get_way == 'in':
      return str(stdin.read()).replace('\\n', '\n')
    elif get_way == 'out':
      return str(stdout.read()).replace('\\n', '\n')
    elif get_way == 'err':
      return str(stderr.read()).replace('\\n', '\n')
    else:
      print("输入获取的方式有误,获取回显结果失败!")

  def cmd_ssh(self, cmd):
    '''
    定义一个交互会话的方法(优点:交互式会话,缺点:响应速度慢)
    :param cmd: linux命令,type:str
    :return:
    '''
    self.channel.send(cmd+'\n')
    time.sleep(5)
    try:
      res = self.channel.recv(1024 * 100000).decode('utf-8')
    except:
      res = self.channel.recv(1024 * 100000).decode('gbk')
    return res
  
  def close_channel(self):
    '''
    关闭交互式会话
    :return:
    '''
    self.channel.close()

  def close_client(self):
    '''
    关闭SSH连接
    :return:
    '''
    self.client.close()

以上就是python 使用paramiko模块进行封装,远程操作linux主机的示例代码的详细内容,更多关于python paramiko模块的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python迭代器定义与简单用法分析
Apr 30 Python
浅析python的优势和不足之处
Nov 20 Python
Python通过paramiko远程下载Linux服务器上的文件实例
Dec 27 Python
python实现多层感知器
Jan 18 Python
Python微医挂号网医生数据抓取
Jan 24 Python
python实现对象列表根据某个属性排序的方法详解
Jun 11 Python
python小程序实现刷票功能详解
Jul 17 Python
使用django的objects.filter()方法匹配多个关键字的方法
Jul 18 Python
opencv导入头文件时报错#include的解决方法
Jul 31 Python
python 循环数据赋值实例
Dec 02 Python
pycharm 2018 激活码及破解补丁激活方式
Sep 21 Python
python 装饰器的基本使用
Jan 13 Python
Python 按比例获取样本数据或执行任务的实现代码
Dec 03 #Python
用 Django 开发一个 Python Web API的方法步骤
Dec 03 #Python
分享unittest单元测试框架中几种常用的用例加载方法
Dec 02 #Python
python 使用cycle构造无限循环迭代器
Dec 02 #Python
python 使用csv模块读写csv格式文件的示例
Dec 02 #Python
python 发送邮件的四种方法汇总
Dec 02 #Python
如何用PyPy让你的Python代码运行得更快
Dec 02 #Python
You might like
php牛逼的面试题分享
2013/01/18 PHP
linux下实现定时执行php脚本
2015/02/13 PHP
golang 调用 php7详解及实例
2017/01/04 PHP
JavaScript 字符串连接性能优化
2008/12/20 Javascript
方便实用的jQuery checkbox复选框全选功能简单实例
2013/10/09 Javascript
jquery属性选择器not has怎么写 行悬停高亮显示
2013/11/13 Javascript
JQuery处理json与ajax返回JSON实例代码
2014/01/03 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
基于javascript实现图片懒加载
2016/01/05 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
2017/03/24 Javascript
微信小程序实现登录页云层漂浮的动画效果
2017/05/05 Javascript
js实现图片上传预览原理分析
2017/07/13 Javascript
jQuery实现广告条滚动效果
2017/08/22 jQuery
详解VueRouter进阶之导航钩子和路由元信息
2017/09/13 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
Angular使用ControlValueAccessor创建自定义表单控件
2019/03/08 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
2020/03/23 Javascript
python uuid模块使用实例
2015/04/08 Python
python面向对象_详谈类的继承与方法的重载
2017/06/07 Python
Python3 socket同步通信简单示例
2017/06/07 Python
python使用KNN算法手写体识别
2018/02/01 Python
Python pyinotify模块实现对文档的实时监控功能方法
2018/10/13 Python
实例讲解Python中整数的最大值输出
2019/03/17 Python
Python中remove漏删和索引越界问题的解决
2020/03/18 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
2020/06/01 Python
详解如何解决canvas图片getImageData,toDataURL跨域问题
2018/09/17 HTML / CSS
美国家居装饰网上商店:Lulu & Georgia
2019/09/14 全球购物
乌克兰在线药房:Аптека24
2019/10/30 全球购物
Aosom西班牙:家具在线商店
2020/06/11 全球购物
幼儿园优秀教师事迹
2014/02/13 职场文书
学生会竞选演讲稿怎么写
2014/08/26 职场文书
民主评议教师党员自我评价
2015/03/04 职场文书
浅谈Laravel中使用Slack进行异常通知
2021/05/29 PHP
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers