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的time模块中的常用方法整理
Jun 18 Python
在Django的视图中使用form对象的方法
Jul 18 Python
深入理解Python中字典的键的使用
Aug 19 Python
完美解决python遍历删除字典里值为空的元素报错问题
Sep 11 Python
python使用pil库实现图片合成实例代码
Jan 20 Python
Python unittest单元测试框架总结
Sep 08 Python
python多个模块py文件的数据共享实例
Jan 11 Python
python 调用钉钉机器人的方法
Feb 20 Python
Python生成MD5值的两种方法实例分析
Apr 26 Python
对python 中class与变量的使用方法详解
Jun 26 Python
对numpy下的轴交换transpose和swapaxes的示例解读
Jun 26 Python
Python基于codecs模块实现文件读写案例解析
May 11 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
第二节--PHP5 的对象模型
2006/11/16 PHP
PHPMailer安装方法及简单实例
2008/11/25 PHP
php下获取http状态的实现代码
2014/05/09 PHP
thinkphp特殊标签用法概述
2014/11/24 PHP
PHP编写简单的App接口
2016/08/28 PHP
php中的异常和错误浅析
2017/05/03 PHP
jquery 插件 任意位置浮动固定层
2008/12/25 Javascript
javascript 关闭IE6、IE7
2009/06/01 Javascript
JS遮罩层效果 兼容ie firefox jQuery遮罩层
2010/07/26 Javascript
Javascript 面试题随笔
2011/03/31 Javascript
如何使用jQUery获取选中radio对应的值(一句代码)
2013/06/03 Javascript
jquery ajax修改全局变量示例代码
2013/11/08 Javascript
jquery 获取dom固定元素 添加样式的简单实例
2014/02/04 Javascript
Javascript让DEDECMS告别手写Tag
2014/09/01 Javascript
jquery实现导航固定顶部的效果仿蘑菇街
2014/10/22 Javascript
JavaScript实现Flash炫光波动特效
2015/05/14 Javascript
JavaScript知识点整理
2015/12/09 Javascript
Vue.js组件tree实现无限级树形菜单
2016/12/02 Javascript
jQuery学习之DOM节点的插入方法总结
2017/01/22 Javascript
js中的DOM模拟购物车功能
2017/03/22 Javascript
Bootstrap table表格初始化表格数据的方法
2018/07/25 Javascript
JavaScript写个贪吃蛇小游戏(超详细)
2020/03/17 Javascript
python交互式图形编程实例(三)
2017/11/17 Python
python删除不需要的python文件方法
2018/04/24 Python
详解python中Numpy的属性与创建矩阵
2018/09/10 Python
对Python获取屏幕截图的4种方法详解
2019/08/27 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
2019/09/15 Python
Python3 虚拟开发环境搭建过程(图文详解)
2020/01/06 Python
微信小程序实现可实时改变转速的css3旋转动画实例代码
2018/09/11 HTML / CSS
实例教程 一款纯css3实现的数字统计游戏
2014/11/10 HTML / CSS
HTML5资源预加载(Link prefetch)详细介绍(给你的网页加速)
2014/05/07 HTML / CSS
MVMT手表官方网站:时尚又实惠的高品质手表
2016/12/04 全球购物
小学生爱国演讲稿
2014/04/25 职场文书
教师教育教学随笔
2015/08/15 职场文书
php TP5框架生成二维码链接
2021/04/01 PHP
快速学习Oracle触发器和游标
2021/06/30 Oracle