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获取网页上图片下载地址的方法
Mar 11 Python
Python实现的密码强度检测器示例
Aug 23 Python
python pandas 对series和dataframe的重置索引reindex方法
Jun 07 Python
python scp 批量同步文件的实现方法
Jan 03 Python
详解Python文件修改的两种方式
Aug 22 Python
使用python脚本自动创建pip.ini配置文件代码实例
Sep 20 Python
Python文件操作方法详解
Feb 09 Python
pandas中的数据去重处理的实现方法
Feb 10 Python
Python bytes string相互转换过程解析
Mar 05 Python
解决python Jupyter不能导入外部包问题
Apr 15 Python
Pytorch十九种损失函数的使用详解
Apr 29 Python
python如何快速拼接字符串
Oct 28 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 cc攻击代码与防范方法
2012/10/18 PHP
Codeigniter整合Tank Auth权限类库详解
2014/06/12 PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
2016/05/16 PHP
Nginx实现反向代理
2017/09/20 Servers
jquery图片上下tab切换效果
2011/03/18 Javascript
jquery ajax 同步异步的执行 return值不能取得的解决方案
2012/01/08 Javascript
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
jQuery实现回车键(Enter)切换文本框焦点的代码实例
2014/05/05 Javascript
Javascript控制input输入时间格式的方法
2015/01/28 Javascript
angularjs学习笔记之简单介绍
2015/09/26 Javascript
JavaScript 轮播图和自定义滚动条配合鼠标滚轮分享代码贴
2016/10/28 Javascript
jQuery基于xml格式数据实现模糊查询及分页功能的方法
2016/12/25 Javascript
Vue表单demo v-model双向绑定问题
2018/06/29 Javascript
ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解
2019/02/28 Javascript
JavaScript获取页面元素的常用方法详解
2019/09/28 Javascript
解决vue-router 嵌套路由没反应的问题
2020/09/22 Javascript
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
Python提取网页中超链接的方法
2016/09/18 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
无法使用pip命令安装python第三方库的原因及解决方法
2018/06/12 Python
Python global全局变量函数详解
2018/09/18 Python
Python 3.8中实现functools.cached_property功能
2019/05/29 Python
使用Python轻松完成垃圾分类(基于图像识别)
2019/07/09 Python
Django 允许局域网中的机器访问你的主机操作
2020/05/13 Python
python 模拟登陆github的示例
2020/12/04 Python
最新党员的自我评价分享
2013/11/04 职场文书
会计职业生涯规划范文
2014/01/04 职场文书
公司庆典邀请函范文
2014/01/13 职场文书
农村婚礼主持词
2014/03/13 职场文书
党员个人对照检查材料范文
2014/09/24 职场文书
2014超市收银员工作总结
2014/11/13 职场文书
初三毕业感言
2015/07/31 职场文书
食堂管理制度范本
2015/08/04 职场文书
青年教师听课心得体会
2016/01/15 职场文书
python实现简单反弹球游戏
2021/04/12 Python
JavaScript原始值与包装对象的详细介绍
2021/05/11 Javascript