python如何利用paramiko执行服务器命令


Posted in Python onNovember 07, 2020

话不多说直接上代码

封装连接

@staticmethod
  def connect(ip, server_user, server_port, server_path):
    """
    连接服务器

    :param :
    :return:
    """
    ssh = paramiko.SSHClient()
    private_key = paramiko.RSAKey.from_private_key_file('{}.ssh/id_rsa'.format(server_path))
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
      ssh.connect(ip, port=server_port, username=server_user, pkey=private_key, timeout=5, allow_agent=True)
      return ssh
    except Exception as e:
      app.logger.info('connect_error info is {}'.format(e.__repr__()))

      return {
        'result': 1,
        'ip': ip,
        'msg': e.__repr__(),
      }

在服务器执行命令

def fabric_run_cmd(self, ip, server_user, server_port, server_path, cmd):
    """
    批量在服务器执行命令

    :return:
    """
    conn = self.connect(ip, server_user, server_port, server_path)
    try:
      if type(conn) == dict:
        return conn
      else:
        stdin, stdout, stderr = conn.exec_command(cmd)
        app.logger.info('fabric_run_cmd_stdout info is {}'.format(stdout.readlines()))
        app.logger.info('fabric_run_cmd_stderr info is {}'.format(stderr.readlines()))
        channel = stdout.channel
        status = channel.recv_exit_status()
        conn.close()
        app.logger.info('fabric_run_cmd_status info is {}'.format(status))
        if status == 0:
          return {
            'ip': ip,
            'msg': '执行成功',
            'result': 0
          }
        else:
          return {
            'ip': ip,
            'msg': stderr.readlines(),
            'result': 1
          }
    except Exception as e:
      app.logger.info('fabric_run_cmd_error info is {}'.format(e.__repr__()))
      return {
        'ip': ip,
        'msg': e.__repr__(),
        'result': 1
      }

将文件发送到服务器

def fabric_put_file(self, ip, src_file, dst_file, server_user, server_port, server_path):
    """
    发送文件到服务器

    :return:
    """
    conn = self.connect(ip, server_user, server_port, server_path)
    if type(conn) == dict:
      return conn
    else:
      try:
        ftp = conn.open_sftp()
        ftp.put(dst_file, src_file) # 发送文件之前先判断有没有目标文件夹 如果没有现在服务器上创建文件夹
        ftp.close() # 在此判断文件是否发送成功
        return {
          'ip': ip,
          'msg': '上传成功',
          'result': 0
        }
      except Exception as e:
        app.logger.info('fabric_put_file_error info is {}'.format(e.__repr__()))
        return {
          'ip': ip,
          'msg': e.__repr__(),
          'result': 1
        }

能力有限,如有不妥请留言指正

以上就是python如何利用paramiko执行服务器命令的详细内容,更多关于python 执行服务器命令的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python中的多线程实例教程
Aug 27 Python
pandas对指定列进行填充的方法
Apr 11 Python
Python实现正则表达式匹配任意的邮箱方法
Dec 20 Python
python write无法写入文件的解决方法
Jan 23 Python
详解pandas删除缺失数据(pd.dropna()方法)
Jun 25 Python
python中dict使用方法详解
Jul 17 Python
django基于存储在前端的token用户认证解析
Aug 06 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
Nov 07 Python
Python参数传递机制传值和传引用原理详解
May 22 Python
keras实现多GPU或指定GPU的使用介绍
Jun 17 Python
Python3基于print打印带颜色字符串
Jul 06 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
Jul 09 Python
基于python模拟TCP3次握手连接及发送数据
Nov 06 #Python
如何使用Django Admin管理后台导入CSV
Nov 06 #Python
Selenium结合BeautifulSoup4编写简单的python爬虫
Nov 06 #Python
python两种获取剪贴板内容的方法
Nov 06 #Python
用python写一个带有gui界面的密码生成器
Nov 06 #Python
python如何编写类似nmap的扫描工具
Nov 06 #Python
Python常用base64 md5 aes des crc32加密解密方法汇总
Nov 06 #Python
You might like
DSP接收机前端设想
2021/03/02 无线电
php 安全过滤函数代码
2011/05/07 PHP
PHP中比较时间大小实例
2014/08/21 PHP
php实现通过ftp上传文件
2015/06/19 PHP
深入剖析浏览器退出之后php还会继续执行么
2016/05/17 PHP
用javascript实现自定义标签
2007/05/08 Javascript
javascript 显示当前系统时间代码
2009/12/28 Javascript
javascript 设为首页与加入收藏兼容多浏览器代码
2011/01/11 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
2013/10/24 Javascript
JS表的模拟方法
2015/02/05 Javascript
JS实现的不规则TAB选项卡效果代码
2015/09/18 Javascript
怎么限制input的text里输入的值只能是数字(正则、js)
2016/05/16 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
2016/07/01 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
2016/08/12 Javascript
使用Vue.js创建一个时间跟踪的单页应用
2016/11/28 Javascript
详解Axios 如何取消已发送的请求
2018/10/20 Javascript
如何利用vue+vue-router+elementUI实现简易通讯录
2019/05/13 Javascript
vue-admin-template配置快捷导航的代码(标签导航栏)
2020/09/04 Javascript
[47:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
对python中两种列表元素去重函数性能的比较方法
2018/06/29 Python
基于python实现高速视频传输程序
2019/05/05 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
2019/06/26 Python
python异步实现定时任务和周期任务的方法
2019/06/29 Python
详解Python中的正斜杠与反斜杠
2019/08/09 Python
Python pandas实现excel工作表合并功能详解
2019/08/29 Python
python实现根据文件格式分类
2019/10/31 Python
python Tornado框架的使用示例
2020/10/19 Python
html5音频_动力节点Java学院整理
2018/08/22 HTML / CSS
Ryderwear澳洲官网:澳大利亚高端健身训练装备品牌
2018/09/18 全球购物
super()与this()的区别
2016/01/17 面试题
服务之星获奖感言
2014/01/21 职场文书
企业党员一句话承诺
2014/05/30 职场文书
2015年学校办公室工作总结
2015/05/26 职场文书
KTV员工管理制度
2015/08/06 职场文书
Nginx配置Https安全认证的实现
2021/05/26 Servers