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 相关文章推荐
shelve  用来持久化任意的Python对象实例代码
Oct 12 Python
python实现协同过滤推荐算法完整代码示例
Dec 15 Python
Python3实现带附件的定时发送邮件功能
Dec 22 Python
Numpy 将二维图像矩阵转换为一维向量的方法
Jun 05 Python
Django 限制用户访问频率的中间件的实现
Aug 23 Python
运用Python的webbrowser实现定时打开特定网页
Feb 21 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
Feb 03 Python
利用Python制作动态排名图的实现代码
Apr 09 Python
解决jupyter notebook显示不全出现框框或者乱码问题
Apr 09 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
Apr 14 Python
面向新手解析python Beautiful Soup基本用法
Jul 11 Python
Django前后端分离csrf token获取方式
Dec 25 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! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
2007/04/18 PHP
一个漂亮的php验证码类(分享)
2013/08/06 PHP
php实现屏蔽掉黑帽SEO的搜索关键字
2015/04/15 PHP
PHP线程的内存回收问题
2016/07/08 PHP
php获取当前url地址的方法小结
2017/01/10 PHP
Ubuntu 16.04下安装PHP 7过程详解
2017/03/28 PHP
PHP获取HTTP body内容的方法
2018/12/31 PHP
ThinkPHP3.2.3框架邮件发送功能图文实例详解
2019/04/23 PHP
Laravel服务容器绑定的几种方法总结
2020/06/14 PHP
js中判断控件是否存在
2010/08/25 Javascript
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
jQuery ajax serialize()方法的使用以及常见问题解决
2013/01/27 Javascript
jqgrid 表格数据导出实例
2013/11/21 Javascript
jQuery操作input值的各种方法总结
2013/11/21 Javascript
AngularJS语法详解(续)
2015/01/23 Javascript
详解webpack异步加载业务模块
2017/06/23 Javascript
Vue用v-for给循环标签自身属性添加属性值的方法
2018/10/18 Javascript
详解VS Code使用之Vue工程配置format代码格式化
2019/03/20 Javascript
微信小程序日历弹窗选择器代码实例
2019/05/09 Javascript
基于layui table返回的值的多级嵌套的解决方法
2019/09/19 Javascript
vue3实现v-model原理详解
2019/10/09 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
jQuery使用ajax传递json对象到服务端及contentType的用法示例
2020/03/12 jQuery
原生js实现的观察者和订阅者模式简单示例
2020/04/18 Javascript
vue 点击其他区域关闭自定义div操作
2020/07/17 Javascript
python 简易计算器程序,代码就几行
2009/08/29 Python
python通过socket查询whois的方法
2015/07/18 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
2019/04/11 Python
Python+Selenium使用Page Object实现页面自动化测试
2019/07/14 Python
pytorch 可视化feature map的示例代码
2019/08/20 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
2020/03/30 Python
python实现与redis交互操作详解
2020/04/21 Python
群众路线教育实践活动方案
2014/02/02 职场文书
实习生求职自荐信
2014/02/07 职场文书
五好文明家庭事迹材料
2014/12/20 职场文书
MySQL表类型 存储引擎 的选择
2021/11/11 MySQL