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跳出循环语句continue与break的区别
Aug 25 Python
Python中一些自然语言工具的使用的入门教程
Apr 13 Python
Python with用法实例
Apr 14 Python
python奇偶行分开存储实现代码
Mar 19 Python
python微信公众号开发简单流程
Mar 23 Python
python实现读Excel写入.txt的方法
Apr 29 Python
Python中修改字符串的四种方法
Nov 02 Python
python文本数据处理学习笔记详解
Jun 17 Python
python二分法查找算法实现方法【递归与非递归】
Dec 06 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
Mar 24 Python
TensorFlow2.1.0最新版本安装详细教程
Apr 08 Python
Python的三个重要函数详解
Jan 18 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_screw安装使用教程(另一个PHP代码加密实现)
2014/05/29 PHP
php三种实现多线程类似的方法
2015/10/30 PHP
php输出图像的方法实例分析
2017/02/16 PHP
基于jquery的下拉框改变动态添加和删除表格实现代码
2020/09/12 Javascript
jQuery实用函数用法总结
2014/08/29 Javascript
JavaScript事件委托技术实例分析
2015/02/06 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?
2015/11/18 Javascript
AngularJS 让人爱不释手的八种功能
2016/03/23 Javascript
全面理解JavaScript中的继承(必看)
2016/06/16 Javascript
Node.js安装配置图文教程
2017/05/10 Javascript
JavaScript输入框字数实时统计更新
2017/06/17 Javascript
vue 之 css module的使用方法
2018/12/04 Javascript
node和vue实现商城用户地址模块
2018/12/05 Javascript
微信小程序实现的动态设置导航栏标题功能示例
2019/01/31 Javascript
详解Vue 换肤方案验证
2019/08/28 Javascript
vue中使用[provide/inject]实现页面reload的方法
2019/09/30 Javascript
Javascript ParentNode和ChildNode接口原理解析
2020/03/16 Javascript
[01:19:34]2014 DOTA2国际邀请赛中国区预选赛 New Element VS Dream time
2014/05/22 DOTA
[01:01:52]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第二场 1月9日
2021/03/11 DOTA
python连接池实现示例程序
2013/11/26 Python
python编程开发之类型转换convert实例分析
2015/11/13 Python
学习python类方法与对象方法
2016/03/15 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
2019/07/07 Python
python 处理微信对账单数据的实例代码
2019/07/19 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
2019/09/25 Python
Python中Pyspider爬虫框架的基本使用详解
2021/01/27 Python
Spartoo芬兰:欧洲最大的网上鞋店
2016/08/28 全球购物
全球地下的服装和态度:Slam Jam
2018/02/04 全球购物
皇家阿尔伯特英国官方商店:Royal Albert骨瓷
2019/03/25 全球购物
工艺工程师工作职责
2013/11/23 职场文书
党员创先争优公开承诺书
2014/03/28 职场文书
数学教师求职信范文
2015/03/20 职场文书
国家助学金受助感言
2015/08/01 职场文书
物业公司管理制度
2015/08/05 职场文书
Redis主从配置和底层实现原理解析(实战记录)
2021/06/30 Redis