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 21 Python
python中迭代器(iterator)用法实例分析
Apr 29 Python
Django imgareaselect手动剪切头像实现方法
May 26 Python
CentOS下使用yum安装python-pip失败的完美解决方法
Aug 16 Python
Python线程之定位与销毁的实现
Feb 17 Python
django模板加载静态文件的方法步骤
Mar 01 Python
详解Python基础random模块随机数的生成
Mar 23 Python
Django框架自定义模型管理器与元选项用法分析
Jul 22 Python
分享一个pycharm专业版安装的永久使用方法
Sep 24 Python
python 获取字典特定值对应的键的实现
Sep 29 Python
解决python3.x安装numpy成功但import出错的问题
Nov 17 Python
python中pdb模块实例用法
Jan 15 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/06/21 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
2015/09/23 PHP
JavaScript 页面坐标相关知识整理
2010/01/09 Javascript
a标签的href和onclick 的事件的区别介绍
2013/07/26 Javascript
javascript原始值和对象引用实例分析
2015/04/25 Javascript
每天一篇javascript学习小结(Boolean对象)
2015/11/12 Javascript
JavaScript统计网站访问次数的实现代码
2015/11/18 Javascript
浅析JavaScript中的对象类型Object
2016/05/26 Javascript
Bootstrap CSS组件之按钮下拉菜单
2016/12/17 Javascript
Bootstrap Table从零开始
2017/06/30 Javascript
vue教程之toast弹框全局调用示例详解
2020/08/24 Javascript
基于webpack.config.js 参数详解
2018/03/20 Javascript
使用Vue CLI创建typescript项目的方法
2019/08/09 Javascript
Vue实现base64编码图片间的切换功能
2019/12/04 Javascript
node.js使用net模块创建服务器和客户端示例【基于TCP协议】
2020/02/14 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日 小组赛A组 TNC VS OpTic
2018/03/30 DOTA
Python实现字典依据value排序
2016/02/24 Python
python的else子句使用指南
2016/02/27 Python
更改Ubuntu默认python版本的两种方法python-> Anaconda
2016/12/18 Python
Python类的动态修改的实例方法
2017/03/24 Python
使用requests库制作Python爬虫
2018/03/25 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
2019/04/09 Python
python和c语言的主要区别总结
2019/07/07 Python
Python数据存储之 h5py详解
2019/12/26 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
2020/04/01 Python
Scrapy项目实战之爬取某社区用户详情
2020/09/17 Python
python爬虫多次请求超时的几种重试方法(6种)
2020/12/01 Python
5个你不知道的HTML5的接口介绍
2013/08/07 HTML / CSS
蛋白质世界:Protein World
2017/11/23 全球购物
青年文明号创建承诺
2014/03/31 职场文书
运动会口号16字
2014/06/07 职场文书
节约用电标语
2014/06/17 职场文书
2014年团支部工作总结
2014/11/17 职场文书
2016年万圣节活动总结
2016/04/05 职场文书
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle