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 相关文章推荐
Python3基础之输入和输出实例分析
Aug 18 Python
详解python 发送邮件实例代码
Dec 22 Python
python re模块的高级用法详解
Jun 06 Python
tensorflow实现简单逻辑回归
Sep 07 Python
django云端留言板实例详解
Jul 22 Python
python利用re,bs4,requests模块获取股票数据
Jul 29 Python
python3 requests库文件上传与下载实现详解
Aug 22 Python
Python类中的魔法方法之 __slots__原理解析
Aug 26 Python
Python求解正态分布置信区间教程
Nov 20 Python
python属于解释语言吗
Jun 11 Python
Python pip安装第三方库实现过程解析
Jul 09 Python
Python制作简单的剪刀石头布游戏
Dec 10 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
Protoss热键控制
2020/03/14 星际争霸
资料注册后发信小技巧
2006/10/09 PHP
php socket方式提交的post详解
2008/07/19 PHP
采用thinkphp自带方法生成静态html文件详解
2014/06/13 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
2019/06/19 PHP
JavaScript 参数中的数组展开 [译]
2012/09/21 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
bootstrap confirmation按钮提示组件使用详解
2017/08/22 Javascript
jquery中done和then的区别(详解)
2017/12/19 jQuery
微信小程序发布新版本时自动提示用户更新的方法
2019/06/07 Javascript
详解element-ui表格中勾选checkbox,高亮当前行
2019/09/02 Javascript
vue解决花括号数据绑定不成功的问题
2019/10/30 Javascript
解决vue-router 二级导航默认选中某一选项的问题
2019/11/01 Javascript
JS运算符简单用法示例
2020/01/19 Javascript
jQuery实现视频展示效果
2020/05/30 jQuery
antd的select下拉框因为数据量太大造成卡顿的解决方式
2020/10/31 Javascript
[52:06]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python中使用 Selenium 实现网页截图实例
2014/07/18 Python
Python中for循环和while循环的基本使用方法
2015/08/21 Python
Windows系统下多版本pip的共存问题详解
2017/10/10 Python
Python中sort和sorted函数代码解析
2018/01/25 Python
Python实现的绘制三维双螺旋线图形功能示例
2018/06/23 Python
Pandas之Fillna填充缺失数据的方法
2019/06/25 Python
python获取array中指定元素的示例
2019/11/26 Python
linux环境下安装python虚拟环境及注意事项
2020/01/07 Python
python中pathlib模块的基本用法与总结
2020/08/17 Python
Python Charles抓包配置实现流程图解
2020/09/29 Python
就业推荐自我鉴定
2013/10/06 职场文书
高校自主招生自荐信
2013/12/09 职场文书
上班离岗检讨书
2014/01/27 职场文书
学校招生宣传广告词
2014/03/19 职场文书
三月雷锋月活动总结
2014/07/03 职场文书
师德标兵事迹材料
2014/12/19 职场文书
六一亲子活动感想
2015/08/07 职场文书
详解JS数组方法
2021/11/20 Javascript
阿里云日志过滤器配置日志服务
2022/04/09 Servers