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操作Redis之设置key的过期时间实例代码
Jan 25 Python
django+mysql的使用示例
Nov 23 Python
python实现一个简单的udp通信的示例代码
Feb 01 Python
Apache,wsgi,django 程序部署配置方法详解
Jul 01 Python
django如何实现视图重定向
Jul 24 Python
Python实现某论坛自动签到功能
Aug 20 Python
python实现将列表中各个值快速赋值给多个变量
Apr 02 Python
Windows下Anaconda和PyCharm的安装与使用详解
Apr 23 Python
Django 解决由save方法引发的错误
May 21 Python
Python 发送邮件方法总结
Aug 10 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
Jan 24 Python
Python中使用Lambda函数的5种用法
Apr 01 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
利用discuz自带通行证整合dedecms的方法以及文件下载
2007/03/06 PHP
过滤掉PHP数组中的重复值的实现代码
2011/07/17 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
2016/03/21 PHP
关于laravel-admin ueditor 集成并解决刷新的问题
2019/10/21 PHP
ajax 文件上传应用简单实现
2009/03/03 Javascript
对xmlHttp对象的理解
2011/01/17 Javascript
mailto的使用技巧分享
2012/12/21 Javascript
javascript 获取图片尺寸及放大图片
2013/09/04 Javascript
js简单实现根据身份证号码识别性别年龄生日
2013/11/29 Javascript
JavaScript实现带缓冲效果的随屏滚动漂浮广告代码
2015/11/06 Javascript
简述jQuery ajax的执行顺序
2016/01/05 Javascript
AngularJS ng-blur 指令详解及简单实例
2016/07/30 Javascript
基于javascript的Form表单验证
2016/12/29 Javascript
浅谈vue引用静态资源需要注意的事项
2018/09/28 Javascript
jQuery实现tab栏切换效果
2020/12/22 jQuery
[02:51]2014DOTA2国际邀请赛 IG战队官方纪录片
2014/07/21 DOTA
python 异或加密字符串的实例
2018/10/14 Python
8种用Python实现线性回归的方法对比详解
2019/07/10 Python
python加载自定义词典实例
2019/12/06 Python
Python如何使用argparse模块处理命令行参数
2019/12/11 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
2020/03/06 Python
简单的命令查看安装的python版本号
2020/08/28 Python
HTML5 canvas 瀑布流文字效果的示例代码
2018/01/31 HTML / CSS
全球领先的鞋类零售商:The Walking Company
2016/07/21 全球购物
西班牙网上书店:Casa del Libro
2016/11/01 全球购物
以特惠价提供在线奢侈品购物:FRMODA.com
2018/01/25 全球购物
澳大利亚最大的网上油画销售画廊:Direct Art Australia
2018/04/15 全球购物
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
Stio官网:男女、儿童户外服装
2019/12/13 全球购物
小学运动会入场式解说词
2014/02/18 职场文书
运动会广播稿150字
2014/02/19 职场文书
爱情寄语大全
2014/04/09 职场文书
竞聘上岗演讲
2014/05/19 职场文书
护士实习求职信
2014/06/22 职场文书
先进学校事迹材料
2014/12/30 职场文书
乡镇司法所2015年度工作总结
2015/10/14 职场文书