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 相关文章推荐
pycharm 使用心得(一)安装和首次使用
Jun 05 Python
详解Python中的正则表达式的用法
Apr 09 Python
介绍Python的Django框架中的QuerySets
Apr 20 Python
Python用户推荐系统曼哈顿算法实现完整代码
Dec 01 Python
python适合人工智能的理由和优势
Jun 28 Python
Python中栈、队列与优先级队列的实现方法
Jun 30 Python
Django命名URL和反向解析URL实现解析
Aug 09 Python
关于多元线性回归分析——Python&SPSS
Feb 24 Python
基于打开pycharm有带图片md文件卡死问题的解决
Apr 24 Python
python实现mean-shift聚类算法
Jun 10 Python
Python 实现二叉查找树的示例代码
Dec 21 Python
pytorch MSELoss计算平均的实现方法
May 12 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获取mysql字段名称和其它信息的例子
2014/04/14 PHP
五款PHP代码重构工具推荐
2014/10/14 PHP
简介PHP的Yii框架中缓存的一些高级用法
2016/03/29 PHP
js模拟弹出效果代码修正版
2008/08/07 Javascript
JavaScript 拾漏补遗
2009/12/27 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
原生JavaScript编写俄罗斯方块
2015/03/30 Javascript
node.js操作mysql(增删改查)
2015/07/24 Javascript
js获取所有checkbox的值的简单实例
2016/05/30 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
2017/01/17 Javascript
jQuery模拟下拉框选择对应菜单的内容
2017/03/07 Javascript
vue动态删除从数据库倒入列表的某一条方法
2018/09/29 Javascript
在vue中使用echarts图表实例代码详解
2018/10/22 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
JavaScript箭头函数中的this详解
2019/06/19 Javascript
layui表格内放置图片,并点击放大的实例
2019/09/10 Javascript
uploadify插件实现多个图片上传并预览
2019/09/30 Javascript
Android应用开发中Action bar编写的入门教程
2016/02/26 Python
python生成二维码的实例详解
2017/10/29 Python
深入了解Python中pop和remove的使用方法
2018/01/09 Python
python使用udp实现聊天器功能
2018/12/10 Python
python matplotlib画图库学习绘制常用的图
2019/03/19 Python
通过 Django Pagination 实现简单分页功能
2019/11/11 Python
python 实现图片上传接口开发 并生成可以访问的图片url
2019/12/18 Python
使用matplotlib动态刷新指定曲线实例
2020/04/23 Python
英国可持续奢侈品包包品牌:Elvis & Kresse
2018/08/05 全球购物
巴西手表购物网站:eclock
2019/03/19 全球购物
TOWER London官网:鞋子、靴子、运动鞋等
2019/07/14 全球购物
土木工程毕业生推荐信
2013/10/28 职场文书
4s店机修工岗位职责
2013/12/20 职场文书
大一军训感言
2014/01/09 职场文书
本科生的职业生涯规划范文
2014/01/09 职场文书
2014年电厂个人工作总结
2014/11/27 职场文书
2016三严三实专题教育活动心得体会
2016/01/06 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers