【Python】Paramiko模块实现Linux服务器远程文件操作

ssh是一个协议,OpenSSH是其中一个开源实现,paramiko是Python的一个库,实现了SSHv2协议(底层使用cryptography)。
有了Paramiko以后,我们就可以在Python代码中直接使用SSH协议对远程服务器执行操作,而不是通过ssh命令对远程服务器进行操作。
由于paramiko属于第三方库,所以需要使用如下命令先行安装
pip install paramiko

底层cryptography:加密解密模块,cryptography 的目标是成为“人类易于使用的密码学包cryptography for humans”,这个想法使你能够创建简单安全、易于使用的加密方案。需要先安装:
pip install cryptography
如果已经安装过,可以通过pip install --user -I cryptography

paramiko包含两个核心组件:SSHClient和SFTPClient。
SSHClient的作用类似于Linux的ssh命令,是对SSH会话的封装,该类封装了传输(Transport),通道(Channel)及SFTPClient建立的方法(open_sftp),通常用于执行远程命令。
SFTPClient的作用类似与Linux的sftp命令,是对SFTP客户端的封装,用以实现远程文件操作,如文件上传、下载、修改文件权限等操作。

# Paramiko中的几个基础名词:
1、Channel:是一种类Socket,一种安全的SSH传输通道;
2、Transport:是一种加密的会话,使用时会同步创建了一个加密的Tunnels(通道),这个Tunnels叫做Channel;
3、Session:是client与Server保持连接的对象,用connect()/start_client()/start_server()开始会话。

SFTPCLient作为一个sftp的客户端对象,根据ssh传输协议的sftp会话,实现远程文件操作,如上传、下载、权限、状态
put(self, localpath, remotepath, callback=None, confirm=True)   上传文件到服务器
get(self, remotepath, localpath, callback=None)    下载服务器的文件
remove(self, path)   删除服务器文件
rename(self, oldpath, newpath)  重命名服务器上的文件
mkdir(self, path, mode=o777)    在服务器创建文件夹

from datetime import datetime
import paramiko
import osclass SftpDeal():def __init__(self):self.hostname = 'ip'self.username = 'username 'self.password = 'password 'self.port = 22try:self.conn = paramiko.Transport((self.hostname, self.port))            # 获取Transport实例self.conn.connect(username=self.username, password=self.password)     # 连接SSH服务端,使用passwordself.sftp_ob = paramiko.SFTPClient.from_transport(self.conn)          # 获取SFTP实例except Exception as e:print(e)# 上传文件,local_file-本地目录;remote_path-远程目录def upload(self,local_file,remote_path):try:self.sftp_ob.put(local_file, remote_path)except Exception as e:self.sftp_ob.mkdir(os.path.split(remote_path)[0])self.sftp_ob.put(local_file, remote_path)print("从本地: %s 上传到: %s" % (local_file, remote_path))print(remote_path + ' 文件上传成功 %s ' % datetime.now().strftime('%Y-%m-%d %H:%M:%S'))#self.conn.close()def download(self,remote_path,local_file):try:self.sftp_ob.get(remote_path,local_file)except Exception as e:self.sftp_ob.mkdir(os.path.split(local_file)[0])self.sftp_ob.get(remote_path, local_file)print("从服务器: %s 下载到: %s" % (remote_path,local_file ))print(remote_path,'文件下载成功 %s ' % datetime.now().strftime('%Y-%m-%d %H:%M:%S'))self.conn.close()def remove(self,remote_path):try:self.sftp_ob.remove(remote_path)print(remote_path + ' 文件删除成功 %s ' % datetime.now().strftime('%Y-%m-%d %H:%M:%S'))except:print('服务器上面无文件:%s'% (remote_path))#self.conn.close()

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python Pytest中fixture之yield唤醒teardown和终结函数addfinalizer

引入 我们之前学习的都是测试用例的前置固件,也就是相当于“setup”。说到这,细心的你可能想到了,那有没有什么方式可以表示出“teardown”?这就是我们今天学习的yield和addfinalizer。 yield yield是一个关键字,它不…

django项目时间与Ubuntu时间不一致

今天发布项目后才发现log时间和win10系统时间或者date不一致。 查了好多。 最后:是django项目中settings中时区的问题 在settings中默认为UTC时区,我们应转换为中国时区 即做一下修改: LANGUAGE_CODE zh-Hans TIME_ZONE Asia/Shanghai…

【Python】Paramiko模块在Windows10中import ssl报错的处理方法

上一篇文章【Python】Paramiko模块实现Linux服务器远程文件操作 介绍了如何通过Paramiko进行 sftp的操作,但最近遇到一个问题,换上家里的windows10电脑后,执行脚本时发现报错:\lib\site-packages\cryptography\hazmat\bindings\op…

【Jmeter篇】Linux环境下安装部署运行Jmeter

JDK安装和配置 1、使用yum线上安装jdk1.8 yum -y list java* #浏览线上所有jdk版本列表 yum -y list java-1.8*#浏览线上jdk1.7版本列表 yum -y install java-1.8.0-openjdk* #下载安装jdk1.8套件 java -version #检查是否安装成功 2、配置全局环境变量 which java ls -…

django项目连接远程数据库

1、远程数据库开放连接权限 如果连接错误,请考虑 1)用户添加访问其他ip权限 2)3306端口是否开放 3)阿里云服务器安全组规则是否添加3306端口 2、django项目中settings中的host填写远程数据库的公有ip,及填写远程数…

【Python实战】使用python批量生成发票

一般的贸易或者货运型公司,经常需要做发票,有时候我们会遇到需要做大批量重复性的发票时,如果人工一个个去做,即耗时而且容易出错,这时我们可以用的python和excel相关的模块去批量生成。 现在有这样一个场景&#xff…

【Jmeter篇】Jmeter踩坑记(一)

踩坑一: Response code: Non HTTP response code: java.net.SocketTimeoutException Response message: Non HTTP response message: connect timed out 查看Load time的时间要大于request设置的connect time out时间,所以抛出该异常。可能是由于服务端有…

Ajax动态拼接li并绑定事件

一、二对新增元素 再次进行绑定相应事件&#xff0c;例如在 Ajax 中的 success 返回函数中&#xff0c;再执行完新增元素的代码后进行绑定 success: $(body).append("<li idnew> new Li </li>"); //这里统一用click事件为例 $(#new).click(function(){}…

【PS】如何将截图获取的印章迁移到新图片上

有时候我们需要特殊签名或者合同印章时&#xff0c;可以通过其他图片上截图后&#xff0c;经过处理后放置到新的图片上&#xff0c;这个时候我们可以通过ps进行处理&#xff0c;主要三个流程&#xff1a; 1.截取需要的签名或印章&#xff0c;用ps消除多余的信息&#xff1b; 2…

【Jmeter篇】Jmeter分布式调度压测部署

Jmeter 是java 应用&#xff0c;对于CPU和内存的消耗比较大&#xff0c;因此&#xff0c;当需要模拟数以千计的并发用户时&#xff0c;使用单台机器模拟所有的并发用户就有些力不从心&#xff0c;甚至会引起JAVA内存溢出错误。为了让jmeter工具提供更大的负载能力&#xff0c;j…

echarts案例链接

https://blog.csdn.net/luanpeng825485697/article/details/77198858 http://echarts.baidu.com/echarts2/doc/example/mix4.html#infographic

【工具】FTP软件FileZilla下载和连接服务器

作为一名偏后台程序测试的测试工程师&#xff0c;经常会接触运维相关工作&#xff0c;与服务器打交道。 一般公司会搭建内网环境和外网环境&#xff0c;项目开发、SIT测试主要是在内网环境做&#xff0c;然后等到UTA、预投产阶段在外网环境。 如果公司业务量大&#xff0c;多个…

【Fiddler篇】Stave插件之环境映射

Stave是一个Fiddler扩展插件&#xff0c;让Fiddler能将URL映射到本地目录&#xff0c;实现批量文件自动响应。 Fiddler自带的AutoResponder每条自动响应规则只能对应一个本地文件&#xff0c; 在文件数目较多的时候&#xff0c;使用起来很不方便&#xff0c;往往需要部署到本地…

C++ const 引用 指针答疑

常变量 const int a 常引用 const int &a 常指针 const int *a const * int a 用法1&#xff1a;常量 取代了C中的宏定义&#xff0c;声明时必须进行初始化(!c类中则不然&#xff09;。const限制了常量的使用方式&#xff0c;并没有描述常量应该如何分配。如果编译器知…

【Jmeter篇】临界区控制器Critical Section Controller业务流顺序负载压测

临界区控制器&#xff08;critical section Controller&#xff09; 作用&#xff1a;临界区控制器确保其子节点下的取样器或控制器将被执行&#xff08;只有一个线程作为一个锁&#xff09;确保它的子元素(samplers /控制器等)在执行控制器的子程序之前只执行一个线程作为指定…

【Python】Python3编码规范

Python核心发行代码里面优先使用ASCII码或Latin-1编码。3.0后UTF-8编码优先于Latin-1。 一 、空格与缩进&#xff1a; 缩进 对于每一次缩进使用4个空格。使用括号、中括号、大括号进行垂直对齐&#xff0c;或者缩进对齐。 制表符还是空格? 永远不要将制表符与空格混合使用。P…

服务器判断客户端是否连接标志

利用客户端传回来的数据长度&#xff0c;如果小于0则是断开状态&#xff0c;否则为连接状态

【Jmeter篇】后置处理器之边界提取器

我们想从接口中提取一些想用的东西&#xff0c;不习惯用正则提取器和json提取器&#xff0c;今天我们来介绍下边界提取器&#xff0c;相对前者较简单些。它通过左右边界来提取需要的内容&#xff0c;它可以匹配任何格式的内容&#xff0c;如文本、json、xpath、html等等&#x…

【Python】内置os.path模块最常用的一些用法

os.path模块主要用于文件的属性获取&#xff0c;在编程中经常用到&#xff0c;以下是该模块的几种常用方法。 更多的方法可以去查看官方文档&#xff1a;http://docs.python.org/library/os.path.html # -*- coding:utf-8 -*-#作者&#xff1a;cacho_37967865 #博客&#xff1…

数组对象的slice和splice方法

数组对象的slice和splice方法之前被大神虐过一次&#xff0c;长长记性&#xff0c;专门把这两个方法拿出来做一个比较&#xff0c;本文仅做学习笔记使用&#xff0c;如有任何意见或建议欢迎在评论区指出。slice定义和用法slice() 方法可从已有的数组中返回选定的元素。语法arra…