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 16 Python
python实现的系统实用log类实例
Jun 30 Python
Python基础语法(Python基础知识点)
Feb 28 Python
使用Python实现跳一跳自动跳跃功能
Jul 10 Python
djano一对一、多对多、分页实例代码
Aug 16 Python
python多线程案例之多任务copy文件完整实例
Oct 29 Python
Python+OpenCV实现旋转文本校正方式
Jan 09 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
Feb 20 Python
使用Keras加载含有自定义层或函数的模型操作
Jun 10 Python
解决运行出现'dict' object has no attribute 'has_key'问题
Jul 15 Python
浅谈pandas dataframe对除数是零的处理
Jul 20 Python
Python中time与datetime模块使用方法详解
Mar 31 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
不错的PHP学习之php4与php5之间会穿梭一点点感悟
2007/05/03 PHP
PHP采集利器 Snoopy 试用心得
2011/07/03 PHP
第三章 php操作符与控制结构代码
2011/12/30 PHP
php中将数组存到文件里的实现代码
2012/01/19 PHP
destoon官方标签大全
2014/06/20 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
2019/02/14 PHP
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
JavaScript实现的背景自动变色代码
2015/10/17 Javascript
JS读写CSS样式的方法汇总
2016/08/16 Javascript
jquery 正整数数字校验正则表达式
2017/01/10 Javascript
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
ndm:NPM的桌面GUI应用程序
2018/10/15 Javascript
浅析TypeScript 命名空间
2020/03/19 Javascript
jquery实现抽奖功能
2020/10/22 jQuery
Python打包可执行文件的方法详解
2016/09/19 Python
Python设计模式之适配器模式原理与用法详解
2019/01/15 Python
django-rest-framework 自定义swagger过程详解
2019/07/18 Python
wxPython窗体拆分布局基础组件
2019/11/19 Python
python print 格式化输出,动态指定长度的实现
2020/04/12 Python
pandas dataframe 中的explode函数用法详解
2020/05/18 Python
pycharm 2020 1.1的安装流程
2020/09/29 Python
html5-Canvas可以在web中绘制各种图形
2012/12/26 HTML / CSS
欧铁通票官方在线销售网站:Eurail.com
2017/10/14 全球购物
内部类的定义、种类以及优点
2013/10/16 面试题
国际商务系学生个人的自我评价
2013/11/26 职场文书
小学新学期教师寄语
2014/01/18 职场文书
医药个人求职信范文
2014/01/29 职场文书
分家协议书
2014/04/21 职场文书
环卫工作汇报材料
2014/10/28 职场文书
离职报告范文
2014/11/04 职场文书
农村老人去世追悼词
2015/06/23 职场文书
同学联谊会邀请函
2019/06/24 职场文书
员工工作失职检讨书范文!
2019/07/03 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书
MySQL 百万级数据的4种查询优化方式
2021/06/07 MySQL