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保存字符串到文件的方法
Jul 01 Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
Aug 10 Python
python批量修改图片大小的方法
Jul 24 Python
python 对key为时间的dict排序方法
Oct 17 Python
python and or用法详解
Jun 26 Python
解决django后台管理界面添加中文内容乱码问题
Nov 15 Python
Anconda环境下Vscode安装Python的方法详解
Mar 29 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
Apr 22 Python
python 中的9个实用技巧,助你提高开发效率
Aug 30 Python
python 线程的五个状态
Sep 22 Python
Python数据清洗工具之Numpy的基本操作
Apr 22 Python
Python常遇到的错误和异常
Nov 02 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作的文本留言本的例子(二)
2006/10/09 PHP
基于mysql的论坛(6)
2006/10/09 PHP
laravel 判断查询数据库返回值的例子
2019/10/11 PHP
JS 实现获取打开一个界面中输入的值
2013/03/19 Javascript
javascript解决innerText浏览器兼容问题思路代码
2013/05/17 Javascript
jquery选择器原理介绍($()使用方法)
2014/03/25 Javascript
jQuery中removeAttr()方法用法实例
2015/01/05 Javascript
浅谈JavaScript字符串拼接
2015/06/25 Javascript
javascript将DOM节点添加到文档的方法实例分析
2015/08/04 Javascript
jQuery+CSS3折叠卡片式下拉列表框实现效果
2015/11/02 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
编写高质量JavaScript代码的基本要点
2016/03/02 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
基于JavaScript canvas绘制贝塞尔曲线
2018/12/25 Javascript
Python中多线程及程序锁浅析
2015/01/21 Python
Python设计模式之组合模式原理与用法实例分析
2019/01/11 Python
Python列表切片操作实例总结
2019/02/19 Python
Python求一批字符串的最长公共前缀算法示例
2019/03/02 Python
Django获取该数据的上一条和下一条方法
2019/08/12 Python
在Django下测试与调试REST API的方法详解
2019/08/29 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
2019/10/18 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
Python如何实现的二分查找算法
2020/05/27 Python
python中如何进行连乘计算
2020/05/28 Python
css3实现垂直下拉动画菜单示例
2014/04/22 HTML / CSS
Dr. Martens马汀博士官网:马丁靴始祖品牌
2016/10/15 全球购物
泰国汽车、火车和轮渡票预订网站:Bus Online Ticket
2017/09/09 全球购物
施华洛世奇意大利官网:SWAROVSKI意大利
2018/07/23 全球购物
经济信息系毕业生自荐信范文
2014/03/15 职场文书
小班评语大全
2014/05/04 职场文书
学校创先争优活动总结
2014/08/28 职场文书
护士求职自荐信
2015/03/25 职场文书
辞职报告(范文三篇)
2019/08/27 职场文书
Python Django框架介绍之模板标签及模板的继承
2021/05/27 Python
详解Python描述符的工作原理
2021/06/11 Python