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基础教程之类class定义使用方法
Feb 20 Python
Python中的高级数据结构详解
Mar 27 Python
使用Pyrex来扩展和加速Python程序的教程
Apr 13 Python
python获取外网ip地址的方法总结
Jul 02 Python
python数组过滤实现方法
Jul 27 Python
Python使用combinations实现排列组合的方法
Nov 13 Python
python 根据时间来生成唯一的字符串方法
Jan 14 Python
Python Numpy库datetime类型的处理详解
Jul 13 Python
django实现类似触发器的功能
Nov 15 Python
django的403/404/500错误自定义页面的配置方式
May 21 Python
Python如何转换字符串大小写
Jun 04 Python
python 如何引入协程和原理分析
Nov 30 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
PHP设置图片文件上传大小的具体实现方法
2013/10/11 PHP
laravel框架实现去掉URL中index.php的方法
2019/10/12 PHP
PHP执行linux命令6个函数代码实例
2020/11/24 PHP
[原创]网络复制内容时常用的正则+editplus
2006/11/30 Javascript
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
2009/12/07 Javascript
JavaScript中两种链式调用实现代码
2011/01/12 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
jquery $.each()使用探讨
2013/09/23 Javascript
jQuery实现隔行背景色变色
2014/11/24 Javascript
jQuery基础知识点总结(必看)
2016/05/31 Javascript
浅谈js和css内联外联注意事项
2016/06/30 Javascript
探索Vue高阶组件的使用
2018/01/08 Javascript
详解基于Vue2.0实现的移动端弹窗(Alert, Confirm, Toast)组件
2018/08/02 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
python自动安装pip
2014/04/24 Python
Mac下Supervisor进程监控管理工具的安装与配置
2014/12/16 Python
Python赋值语句后逗号的作用分析
2015/06/08 Python
python实现判断数组是否包含指定元素的方法
2015/07/15 Python
利用Python在一个文件的头部插入数据的实例
2018/05/02 Python
scikit-learn线性回归,多元回归,多项式回归的实现
2019/08/29 Python
Python3.7下安装pyqt5的方法步骤(图文)
2020/05/12 Python
Python连接Impala实现步骤解析
2020/08/04 Python
Web前端页面跳转并取到值
2017/04/24 HTML / CSS
网络公司美工设计工作个人的自我评价
2013/11/03 职场文书
工程管理专业毕业生自荐信
2014/01/24 职场文书
优秀求职信范文分享
2014/01/26 职场文书
六一节目主持词
2014/04/01 职场文书
工地安全生产标语
2014/06/06 职场文书
四风批评与自我批评范文
2014/10/14 职场文书
小学生作文评语集锦
2014/12/25 职场文书
项目验收申请报告
2015/05/15 职场文书
爱心捐赠活动简讯
2015/07/20 职场文书
2015年治庸问责工作总结
2015/07/27 职场文书
公司员工宿舍管理制度
2015/08/03 职场文书
九年级数学教学反思
2016/02/17 职场文书
sentinel支持的redis高可用集群配置详解
2022/04/01 Redis