简介:

Paramiko是基于Python(2.7,3.4+)版本实现和封装了SSHv2协议,底层是用cryptography实现,我们如果希望远程登录主机或者远程下载或者上传文件到远程主机都可以使用该库实现。Paramiko属于第三方python库,需要我们使用pip进行安装,如果是离线需要在有网络的环境下载好whl文件,再到对应的离线环境进行安装。

主要功能:

类似于SSH协议,Paramiko主要分为SSHClient和SFTPClient,前者主要对远程主机进行操作,输入命令对远程主机进行控制,后者主要实现了从远程主机上上传下载文件,除此之外还有很多实用的方法,本文主要是自己在工作中经常使用的方法进行封装,更多更全面的介绍请参考paramiko的api文档https://www.paramiko.org/

import paramiko

class SSHConnection:
# 初始化连接创建Transport通道
def __init__(self, host, user, pwd):
self.host = host
self.port = 22
self.user = user
self.pwd = pwd
self.__transport = paramiko.Transport((self.host, self.port))
self.__transport.connect(username=self.user, password=self.pwd)
self.sftp = paramiko.SFTPClient.from_transport(self.__transport) # 关闭通道
def close(self):
self.sftp.close()
self.__transport.close() # 上传文件到远程主机
def upload(self, local_path, remote_path):
self.sftp.put(local_path, remote_path) # 从远程主机下载文件到本地
def download(self, local_path, remote_path):
self.sftp.get(remote_path, local_path) # 在远程主机上创建目录
def mkdir(self, target_path, mode='0777'):
self.sftp.mkdir(target_path, mode) # 删除远程主机上的目录
def rmdir(self, target_path):
self.sftp.rmdir(target_path) # 查看目录下文件以及子目录(如果需要更加细粒度的文件信息建议使用listdir_attr)
def listdir(self, target_path):
return self.sftp.listdir(target_path) # 删除文件
def remove(self, target_path):
self.sftp.remove(target_path) # 查看目录下文件以及子目录的详细信息(包含内容和参考os.stat返回一个FSTPAttributes对象,对象的具体属性请用__dict__查看)
def listdirattr(self, target_path):
try:
list = self.sftp.listdir_attr(target_path)
except BaseException as e:
print(e)
list = []
return list # 获取文件详情
def stat(self, remote_path):
return self.sftp.stat(remote_path) # SSHClient输入命令远程操作主机
def cmd(self, command):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy) # 设置以什么方式连接远程客户端,这里配置自动协商
ssh._transport = self.__transport
stdin, stdout, stderr = ssh.exec_command(command) # 远程执行命令,结果会返回标准输入、标准输出、标准错误输出
result = stdout.read()
print(result)
return result

具体使用举例:

from paramikotools import SSHConnection
import os
import time
import datetime
from cmdline import parse_args
from util_log import Logging
ssh = None
logging = Logging().get_logger()
#递归遍历远程目录下的所有文件
def gci(remote_path,pathlist):
for f in ssh.listdirattr(remote_path):
if (str(f.longname).split(" ")[0].startswith('d')):
gci(os.path.join(remote_path,f.filename),pathlist)
else:
pathlist.append(os.path.join(remote_path,f.filename))
return pathlist if __name__ == '__main__':
#接收参数
args = parse_args()
#初始化ssh
ssh = SSHConnection(host=args.srchost,user=args.srcuser,pwd=args.srcpasswd)
while True:
try:
#创建本地接收文件目录(按天创建目录)
datedir = os.path.join(args.dstpath,datetime.datetime.now().strftime('%Y%m%d'))
#创建子目录之前保证父级目录创建否则抛出异常
os.mkdir(args.dstpath)
os.mkdir(datedir)
except BaseException as e:
pass
beforedict = dict()
afterdict = dict()
pathlist = []
#获取所有文件名以及每个文件的当前大小
for i in gci(args.srcpath,pathlist):
beforedict.setdefault(i,ssh.stat(i).st_size)
#隔interval秒获取每个文件名以及当前大小
time.sleep(int(args.interval))
for i in gci(args.srcpath,pathlist):
afterdict.setdefault(i,ssh.stat(i).st_size)
#对比时间前后文件大小如果一致认为文件已经生成完成,将文件下载到本地
for i in beforedict.keys():
if beforedict.get(i) == afterdict.get(i):
try:
ssh.download(os.path.join(datedir,os.path.basename(i)),i)
logging.info('File '+i+' download completed')
ssh.remove(i)
logging.info('File '+i+' deleted')
except BaseException as e:
logging.error('File '+i+' download failed')
logging.error(e)
logging.error('File '+i+' delete failed')
ssh.close()

参考:https://blog.csdn.net/qq_24674131/article/details/95618304

paramiko模块的使用的更多相关文章

  1. paramiko模块的安装

    1.找到自己python安装的目录(默认路径:C:\Users\zhangliyuan\AppData\Local\Programs\Python\Python35) 注:cmd中所有命令 2.进入S ...

  2. python远程连接paramiko 模块和堡垒机实现

    paramiko使用 paramiko模块是基于python实现了SSH2远程安全连接,支持认证和密钥方式,可以实现远程连接.命令执行.文件传输.中间SSH代理功能 安装 pip install pa ...

  3. 利用paramiko模块实现堡垒机+审计功能

    paramiko模块是一个远程连接服务器,全真模拟ssh2协议的python模块,借助paramiko源码包中的demos目录下:demo.py和interactive.py两个模块实现简单的堡垒机+ ...

  4. 在Windows和Linux上安装paramiko模块以及easy_install的安装方法

    一.paramiko模块有什么用? paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.由于使用的是python这样的能够跨平台运行的语言 ...

  5. paramiko模块-2

    如何用paramiko模块模拟登入服务器,并记录操作日志,起到审计的作用? 各个client ---(连接跳转机)--->(跳转机)------>各自的目标服务器. 目前我们公司的跳转机, ...

  6. paramiko模块

    安装: # pycrypto,由于 paramiko 模块内部依赖pycrypto,所以先下载安装pycrypto (1) wget http://ftp.dlitz.net/pub/dlitz/cr ...

  7. Win7下Python2.7环境安装paramiko模块

    Win7下Python2.7环境安装paramiko模块,经过安装并测试成功,整理文档如下: 1.下载安装Windows版本的Python2.7,我默认装在C:\Python27 我的python已经 ...

  8. Python Paramiko模块与MySQL数据库操作

    Paramiko模块批量管理:通过调用ssh协议进行远程机器的批量命令执行. 要使用paramiko模块那就必须先安装这个第三方模块,仅需要在本地上安装相应的软件(python以及PyCrypto), ...

  9. paramiko模块,线程,进程

    关于paramiko模块 paramiko是基于Python实现的ssh2远程安全连接,支持认证及密钥方式远程执行命令.文件传输,中间ssh代理等 paramiko的安装: 安装好之后,用parami ...

  10. Python paramiko 模块

    paramiko模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: import paramiko # 创建SSH对象 ssh ...

随机推荐

  1. 报错解决:partially initialized module 'charset_normalizer' has no attribute 'md__mypyc' (most likely due to a circular import)

    在运行jupyter 时候报错'partially initialized module 'charset_normalizer' has no attribute 'md__mypyc' (most ...

  2. 神经网络之卷积篇:详解卷积神经网络示例(Convolutional neural network example)

    详解卷积神经网络示例 假设,有一张大小为32×32×3的输入图片,这是一张RGB模式的图片,想做手写体数字识别.32×32×3的RGB图片中含有某个数字,比如7,想识别它是从0-9这10个数字中的哪一 ...

  3. Dash 2.18版本新特性介绍

    本文示例代码已上传至我的Github仓库:https://github.com/CNFeffery/dash-master Gitee同步仓库地址:https://gitee.com/cnfeffer ...

  4. CSS – :has parent selector, @container container query, transform replacement, subgrid (2022 期待新功能)

    前言 CSS 一直有一些老问题没有被解决. 2022 视乎看见了曙光. 参考 4 Exciting New CSS Features in 2022 :has() 参考: YouTube – How ...

  5. Google Analytics & Ads 学习笔记

    更新: 2021-09-13 Naming conversion for event category, action, label https://support.google.com/analyt ...

  6. DLA:动态层级注意力架构,实现特征图的持续动态刷新与交互 | IJCAI'24

    论文深入探讨了层级注意力与一般注意力机制之间的区别,并指出现有的层级注意力方法是在静态特征图上实现层间交互的.这些静态层级注意力方法限制了层间上下文特征提取的能力.为了恢复注意力机制的动态上下文表示能 ...

  7. Java中使用BigDecimal进行double类型的计算(高精度,可保留几位小数)

    Java中 小数直接进行乘除运算,会出现精度问题导致计算结果有误需要使用 BigDecimal 类型辅助运算,保证精度无误源码: import java.math.BigDecimal;import ...

  8. Spring —— 核心概念

    IoC (Inversion of Control) 控制反转 使用对象时,由主动new产生对象转换为由外部提供对象,对象的创建控制权由程序转移至外部,这种思想成为控制反转 Spring技术对IoC思 ...

  9. 【QT性能优化】QT性能优化之QT6框架高性能模型视图代理框架千万级数据表分层查询优化

    [QT性能优化]QT性能优化之QT6框架高性能模型视图代理框架千万级数据表分层查询优化 简介 本文使用QT树状控件QTreeView快速展示SQLite数据库中的1000万条具有层次结构的数据记录,当 ...

  10. 30. 串联所有单词的子串 Golang实现

    题目描述: 给定一个字符串 s 和一个字符串数组 words. words 中所有字符串 长度相同 . s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串. 例如, ...