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中正则表达式的使用详解
Oct 17 Python
详解Python的Django框架中的通用视图
May 04 Python
Python实现计算最小编辑距离
Mar 17 Python
Python插件virtualenv搭建虚拟环境
Nov 20 Python
详解pandas安装若干异常及解决方案总结
Jan 10 Python
Python多进程写入同一文件的方法
Jan 14 Python
python随机在一张图像上截取任意大小图片的方法
Jan 24 Python
PyCharm专业最新版2019.1安装步骤(含激活码)
Oct 09 Python
python isinstance函数用法详解
Feb 13 Python
Python使用Excel将数据写入多个sheet
May 16 Python
解决Keras使用GPU资源耗尽的问题
Jun 22 Python
Python3合并两个有序数组代码实例
Aug 11 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
ThinkPHP CURD方法之limit方法详解
2014/06/18 PHP
关于PHP开发的9条建议
2015/07/27 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
2016/12/23 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
2016/12/27 PHP
thinkphp分页集成实例
2017/07/24 PHP
javascript编程起步(第四课)
2007/02/27 Javascript
jquery实现预览提交的表单代码分享
2014/05/21 Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
2014/11/23 Javascript
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
nodejs和php实现图片访问实时处理
2017/01/05 NodeJs
基于jQuery实现咖啡订单管理简单应用
2017/02/10 Javascript
详解vue-cli开发环境跨域问题解决方案
2017/06/06 Javascript
vue-resource请求实现http登录拦截或者路由拦截的方法
2018/07/11 Javascript
vue单页缓存方案分析及实现
2018/09/25 Javascript
[02:41]2015国际邀请赛中国区预选赛观战指南
2015/05/20 DOTA
[34:10]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
Python使用微信SDK实现的微信支付功能示例
2017/06/30 Python
Python利用matplotlib做图中图及次坐标轴的实例
2019/07/08 Python
Python 控制终端输出文字的实例
2019/07/12 Python
Python获取二维数组的行列数的2种方法
2020/02/11 Python
django 数据库 get_or_create函数返回值是tuple的问题
2020/05/15 Python
细说NumPy数组的四种乘法的使用
2020/12/18 Python
app内嵌H5 webview 本地缓存问题的解决
2020/10/19 HTML / CSS
英国度假别墅预订:Sykes Cottages
2017/06/12 全球购物
澳大利亚领先的在线机械五金、园艺和存储专家:Edisons
2018/03/24 全球购物
PHP面试题大全
2015/10/16 面试题
软件缺陷的分类都有哪些
2014/08/22 面试题
优秀应届毕业生推荐信
2014/02/18 职场文书
竞赛口号大全
2014/06/16 职场文书
中秋手机店促销方案
2014/06/16 职场文书
注册资产评估专业求职信
2014/07/16 职场文书
2014年高一班主任工作总结
2014/12/05 职场文书
合作与交流自我评价
2015/03/09 职场文书
女儿满月酒致辞
2015/07/29 职场文书
MySQL 条件查询的常用操作
2022/04/28 MySQL