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探索之静态方法和类方法的区别详解
Oct 27 Python
R语言 vs Python对比:数据分析哪家强?
Nov 17 Python
Python机器学习之决策树算法实例详解
Dec 06 Python
Django开发中复选框用法示例
Mar 20 Python
理想高通滤波实现Python opencv示例
Jan 30 Python
Python用字典构建多级菜单功能
Jul 11 Python
python将字符串list写入excel和txt的实例
Jul 20 Python
python xlwt如何设置单元格的自定义背景颜色
Sep 03 Python
详解python内置常用高阶函数(列出了5个常用的)
Feb 21 Python
django xadmin action兼容自定义model权限教程
Mar 30 Python
解析python 中/ 和 % 和 //(地板除)
Jun 28 Python
python多次执行绘制条形图
Apr 20 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/10/25 PHP
php使用websocket示例详解
2014/03/12 PHP
zf框架的registry(注册表)使用示例
2014/03/13 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
2017/05/26 PHP
php简单构造json多维数组的方法示例
2017/06/08 PHP
excel操作之Add Data to a Spreadsheet Cell
2007/06/12 Javascript
javascript 面向对象全新理练之继承与多态
2009/12/03 Javascript
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
一个简单的动态加载js和css的jquery代码
2014/09/01 Javascript
js小数计算小数点后显示多位小数的实现方法
2016/05/30 Javascript
JS对HTML表格进行增删改操作
2016/08/22 Javascript
浅谈jQuery中Ajax事件beforesend及各参数含义
2016/12/03 Javascript
微信小程序通过api接口将json数据展现到小程序示例
2017/01/20 Javascript
原生JS中slice()方法和splice()区别
2017/03/06 Javascript
详解动画插件wow.js的使用方法
2017/09/13 Javascript
jQuery Validate插件ajax方式验证输入值的实例
2017/12/21 jQuery
详解VUE2.X过滤器的使用方法
2018/01/11 Javascript
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
2018/09/30 Javascript
Vue中jsx不完全应用指南小结
2019/11/01 Javascript
Vue执行方法,方法获取data值,设置data值,方法传值操作
2020/08/05 Javascript
Vue+Java 通过websocket实现服务器与客户端双向通信操作
2020/09/22 Javascript
element-ui封装一个Table模板组件的示例
2021/01/04 Javascript
Python 获取div标签中的文字实例
2018/12/20 Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
2020/01/05 Python
瑞士网球商店:Tennis-Point
2020/03/12 全球购物
俄罗斯运动、健康和美容产品在线商店:Lactomin.ru
2020/07/23 全球购物
50道外企软件测试面试题
2014/08/18 面试题
心理健康教育心得体会
2013/12/29 职场文书
金融事务专业毕业生求职信
2014/02/23 职场文书
《天安门广场》教学反思
2014/04/23 职场文书
病媒生物防治方案
2014/05/13 职场文书
企业宣传工作方案
2014/06/02 职场文书
中学生旷课检讨书2篇
2014/10/09 职场文书
Pytorch 实现变量类型转换
2021/05/17 Python
PyTorch 如何自动计算梯度
2021/05/23 Python
Django与数据库交互的实现
2021/06/03 Python