首页 > 其他分享 >paramiko的简单使用

paramiko的简单使用

时间:2023-04-09 23:24:37浏览次数:27  
标签:return self 简单 paramiko 使用 path transport cls

1.封装

近期工作中需要从一个服务器上执行某些脚本,所以需要ssh到该服务器执行命令,paramiko就是一个很不错的选择

为了方便使用,以下是简单的封装

import paramiko


class ParamikoSftp:
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, '_instance'):
            cls._instance = super(ParamikoSftp, cls).__new__(cls)
        return cls._instance

    def __init__(self, ip, port, username, password):
        self.transport = paramiko.Transport((ip, port))
        self.transport.connect(username=username, password=password)
        self.sftp = paramiko.SFTPClient.from_transport(self.transport)
        self.client = paramiko.SSHClient()
        self.client._transport = self.transport

    def put(self, local_file, remote_path):
        try:
            self.sftp.put(local_file, remote_path)
            return True, None
        except Exception as e:
            return False, repr(e)

    def get(self, remote_path, local_path):
        try:
            self.sftp.get(remote_path, local_path)
            return True, None
        except Exception as e:
            return False, repr(e)

    def exec_command(self, cmd):
        try:
            _, stdout, stderr = self.client.exec_command(cmd)
            return stdout.read().decode('utf-8'), stderr.read().decode('utf-8')
        except Exception as e:
            print("error", e)
            return False, repr(e)

    def close(self):
        self.sftp.close()
        self.client.close()
        self.transport.close()

  

2.执行长时间任务

有些脚本是需要执行很长时间的,比如说几个小时那种,直接调用exec_command()的话它会等待脚本执行完的,所以我们需要使用nohup命令让它后台执行

例如

paramiko_sftp = ParamikoSftp(**finance_ssh_config)  # 通过配置实例化对象
cmd_python = "nohup python /xxx/main.py > /xxx/nohup.out 2>&1 &"
stdout, stderr = paramiko_sftp.exec_command(cmd_python)

  

标签:return,self,简单,paramiko,使用,path,transport,cls
From: https://www.cnblogs.com/hushaojun/p/17301414.html

相关文章

  • 使用paramiko上传文件到Linux并且解压
    思路是,使用zipfile对文件进行压缩,之后使用paramiko提供的SFTPClient()上传文件,之后使用paramiko的SSHClient()执行Linux命令操作文件importosimportzipfileimportparamiko#使用zipfile压缩文件defzip_code(dir_name,zip_name):file_list=[]ifos.path.is......
  • Git 工具 - 子模块: submodule与subtree的使用
    git日常使用中,基本都是一个项目一个Git仓库的形式,那么当我们的代码中碰到了业务级别的需要复用的代码,我们一般怎么做呢?比如:某个工作中的项目需要包含并使用另一个项目。也许是第三方库,或者你独立开发的,用于多个父项目的库。所以需要提取一个公共的类库提供给多个项目使用,但是......
  • @Cacheable和@CachePut存入redis的数据使用redisTemplate取出时为null的解决
    当使用@Cacheable和@CachePut注解存数据到redis中时如果使用spring默认的rediskey序列化方式时,使用redisTemplate取数据为null@CacheConfig(cacheNames="users")存入redisusers目录下取数据时的key为users::usernamepublicinterfaceUserRepositoryextendsJpaRepos......
  • libev使用
     1.安装:https://blog.csdn.net/Dancer__Sky/article/details/851569722.使动态链接库生效命令:/sbin/ldconfig-v3.编译命令:gcc-olibevtest2libevtest2.c-lev4.测试程序root@SHPD18F-SP05:~#catlibevtest2.c#include<stdio.h>#include<stdint.h>#include......
  • SpringMVC中使用引入jquery不能加载页面
    今天在学习springMVC的json数据绑定时,需要使用到jquery发送ajax请求。但是当我通过是<script>标签引入了jquery.js。但是当我访问该jsp的时候就是不显示页面的内容我一直以为时SpringMVC的servelt拦截器拦截了静态资源,但是我过滤了静态资源还是不显示。后来才发现,我把<script......
  • Java 异常处理:使用和思考
    概念异常处理的概念起源于早期的编程语言,如LISP、PL/I和CLU。这些编程语言首次引入了异常处理机制,以便在程序执行过程中检测和处理错误情况。异常处理机制随后在Ada、Modula-3、C++、Python、Java等编程语言中得到了广泛采用和发展。在Java中,异常处理是提供一种在程序运行......
  • 【学习笔记】rabbitmq设置队列ttl和使用延迟插件的代码示例
    文章目录设置队列ttl配置文件生产者消费者设置消息ttl延迟插件的使用修改配置文件修改生产者修改消费者设置队列ttl代码架构:创建两个队列QA和QB,两者队列TTL分别设置为10S和40S,然后在创建一个交换机X和死信交换机Y,它们的类型都是direct,创建一个死信队列QD配置文件spring.rabbitmq.h......
  • 优先级队列PriorityQueue在算法问题中的使用
    文章目录优先级队列介绍与优先级队列有关的习题[179.最大数][918.环形子数组的最大和][1094.拼车][264.丑数II]前k个出现频率最高的数字用优先级队列合并k个有序链表滑动窗口的最大值其他:对二维数组自定义排序优先级队列介绍优先队列一般基于二叉堆实现,二叉堆:堆的根节点的优......
  • 【springboot中使用拦截器】
    1.拦截器原理1.定义拦截器:2.配置拦截器3.解决静态资源被拦截2.拦截器使用实例2.1判断用户有没有登录2.2取消拦截操作1.拦截器原理拦截器的原理很简单,是AOP的一种实现,专门拦截对动态资源的后台请求,即拦截对控制层的请求。使用场景比较多的是判断用户是否有权限请求后台,更拔高一层的......
  • 【学习笔记】mybatis中的缓存介绍和使用
    文章目录介绍一级缓存和二级缓存让一级缓存失效的方法二级缓存的使用清空或者跳过二级缓存的3种方式介绍什么是缓存?缓存就是存储数据的一个地方(称作:Cache),当程序要读取数据时,会首先从缓存中获取,有则直接返回,否则从其他存储设备中获取,缓存最重要的一点就是从其内部获取数据的速度是......