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使用urllib2获取网络资源实例讲解
Dec 02 Python
在Python的Django框架中用流响应生成CSV文件的教程
May 02 Python
深入理解python中的atexit模块
Mar 07 Python
python3操作微信itchat实现发送图片
Feb 24 Python
python简单验证码识别的实现方法
May 10 Python
python实现在函数图像上添加文字和标注的方法
Jul 08 Python
python基于paramiko将文件上传到服务器代码实现
Jul 08 Python
django创建超级用户过程解析
Sep 18 Python
Python接口自动化判断元素原理解析
Feb 24 Python
利用Python实现某OA系统的自动定位功能
May 27 Python
pytorch简介
Nov 11 Python
python 爬取华为应用市场评论
May 29 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
模仿OSO的论坛(四)
2006/10/09 PHP
繁体中文转换为简体中文的PHP函数
2006/10/09 PHP
php excel类 phpExcel使用方法介绍
2010/08/21 PHP
php使用Smarty的相关注意事项及访问变量的几种方式
2011/12/08 PHP
Javascript new关键字的玄机 以及其它
2010/08/25 Javascript
解析瀑布流布局:JS+绝对定位的实现
2013/05/08 Javascript
JavaScript的漂亮的代码片段
2013/06/05 Javascript
javascript实现促销倒计时+fixed固定在底部
2013/09/18 Javascript
Bootstrap每天必学之响应式导航、轮播图
2016/04/25 Javascript
详解JavaScript跨域总结与解决办法
2016/10/31 Javascript
bootstrap weebox 支持ajax的模态弹出框
2017/02/23 Javascript
angular2+nodejs实现图片上传功能
2017/03/27 NodeJs
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
JS解析url查询参数的简单代码
2017/08/06 Javascript
解决Layui中layer报错的问题
2019/09/03 Javascript
vue 实现cli3.0中使用proxy进行代理转发
2019/10/30 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
2020/02/10 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
[00:44]2016完美“圣”典 风云人物:Mikasa宣传片
2016/12/07 DOTA
python文件读写操作与linux shell变量命令交互执行的方法
2015/01/14 Python
python创建临时文件夹的方法
2015/07/06 Python
django基础之数据库操作方法(详解)
2017/05/24 Python
python基础_文件操作实现全文或单行替换的方法
2017/09/04 Python
Python实现将多个空格换为一个空格.md的方法
2018/12/20 Python
Python通过for循环理解迭代器和生成器实例详解
2019/02/16 Python
Python实现Linux监控的方法
2019/05/16 Python
python 中关于pycharm选择运行环境的问题
2020/10/31 Python
中国双语服务优势的在线购票及活动平台:247tickets
2018/10/26 全球购物
物业管理求职自荐信
2013/09/25 职场文书
车辆工程专业求职信
2014/06/14 职场文书
大学军训自我鉴定大全
2014/09/18 职场文书
政府班子四风问题整改措施
2014/10/04 职场文书
2015年毕业生自荐信范文
2015/03/24 职场文书
python3读取文件指定行的三种方法
2021/05/24 Python
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
2022/04/13 Java/Android
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL