python通过paramiko复制远程文件及文件目录到本地


Posted in Python onApril 30, 2019

最近写运维自动化平台,需要用python写很多的小功能模块。

这里就分享一个用Python的paramiko来实现功能的一段代码:

复制远程服务器上的文件及文件夹到本地目录。

解释一下什么叫paramiko:

paramiko是用python写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。利用该模块,可以方便的进行ssh连接和sftp协议进行sftp文件传输以及远程命令执行。

安装paramiko也很简单,我用的是python3,装好了pip,可以直接用pip来安装。
不过由于 paramiko 模块内部依赖pycrypto,所以先下载安装pycrypto:

pip3 install pycrypto
pip3 install paramiko

好了。我定义一个方法,用于远程复制文件。代码如下:

import os
import paramiko

def RemoteScp(host_ip, host_port, host_username, host_password, remote_file, local_file):
  scp = paramiko.Transport((host_ip, host_port))
  scp.connect(username=host_username, password=host_password)
  sftp = paramiko.SFTPClient.from_transport(scp)
  sftp.get(remote_file, local_file)
  scp.close()
  return ("success")

注意这里的语句:

sftp.get(remote_file, local_file)中自带的get方法,只能拷贝文件目录,不能拷贝文件夹。

然后调用这个方法:

if __name__ == '__main__':
  host_ip = '192.168.1.123'
  host_port = 22
  host_username = 'root'
  host_password = 'password'
  remote_path = '/tmp/test.sql'
  local_path = '/tmp/test.sql'
  RemoteScp(host_ip, host_port, host_username, host_password, remote_path, local_path)

这就是基本远程文件复制的功能实现。这里只能实现文件对文件的远程复制。

如果我们要远程复制整个文件夹。需要对上面的方法改进一下,加一段循环,让其能遍历远程目录里的所有文件,然后按照上面的方法依次复制到本地。

我在代码中加了一些注释。修改以后的完整代码如下:

import os
import paramiko

def RemoteScp(host_ip, host_port, host_username, host_password, remote_path, local_path):
  scp = paramiko.Transport((host_ip, host_port))
  scp.connect(username=host_username, password=host_password)
  sftp = paramiko.SFTPClient.from_transport(scp)
  try:
    remote_files = sftp.listdir(remote_path)
    for file in remote_files:  #遍历读取远程目录里的所有文件
      local_file = local_path + file
      remote_file = remote_path + file
      sftp.get(remote_file, local_file)
  except IOError:  # 如果目录不存在则抛出异常
    return ("remote_path or local_path is not exist")
  scp.close()


if __name__ == '__main__':
  host_ip = '192.168.1.123'    # 远程服务器IP
  host_port = 22          # 远程服务器端口
  host_username = 'root'      #远程服务器用户名
  host_password = 'password'    #远程服务器密码
  remote_path = '/tmp/'      #这个是远程目录
  local_path = '/tmp/'       #这个是本地目录
  RemoteScp(host_ip, host_port, host_username, host_password, remote_path, local_path) #调用方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python设计模式之单例模式实例
Apr 26 Python
Windows下搭建python开发环境详细步骤
Jul 20 Python
MySQL适配器PyMySQL详解
Sep 20 Python
django使用xlwt导出excel文件实例代码
Feb 06 Python
python单例模式获取IP代理的方法详解
Sep 13 Python
Python 数据库操作 SQLAlchemy的示例代码
Feb 18 Python
python读取ini配置文件过程示范
Dec 23 Python
Python的形参和实参使用方式
Dec 24 Python
Python实现搜索算法的实例代码
Jan 02 Python
python 数据库查询返回list或tuple实例
May 15 Python
Django实现后台上传并显示图片功能
May 29 Python
keras实现图像预处理并生成一个generator的案例
Jun 17 Python
python实现定时压缩指定文件夹发送邮件
Dec 22 #Python
python定时复制远程文件夹中所有文件
Apr 30 #Python
python实现图片转字符小工具
Apr 30 #Python
python 列表中[ ]中冒号‘:’的作用
Apr 30 #Python
python实现趣味图片字符化
Apr 30 #Python
python3对接mysql数据库实例详解
Apr 30 #Python
Python3.5局部变量与全局变量作用域实例分析
Apr 30 #Python
You might like
8个出色的WordPress SEO插件收集
2011/02/26 PHP
PHP中使用php://input处理相同name值的表单数据
2015/02/03 PHP
教你识别简单的免查杀PHP后门
2015/09/13 PHP
PHP数组对象与Json转换操作实例分析
2019/10/22 PHP
Javascript日期对象的dateAdd与dateDiff方法
2008/11/18 Javascript
JQuery jsonp 使用示例代码
2009/08/12 Javascript
用 Javascript 验证表单(form)中多选框(checkbox)值
2009/09/08 Javascript
悬浮数字的实现案例
2014/02/19 Javascript
php is_numberic函数造成的SQL注入漏洞
2014/03/10 Javascript
基于NodeJS的前后端分离的思考与实践(五)多终端适配
2014/09/26 NodeJs
JavaScript控制两个列表框listbox左右交换数据的方法
2015/03/18 Javascript
Angular ng-class详解及实例代码
2016/09/19 Javascript
js闭包用法实例详解
2016/12/13 Javascript
mongoose更新对象的两种方法示例比较
2017/12/19 Javascript
Vue实现active点击切换方法
2018/03/16 Javascript
微信小程序实现topBar底部选择栏效果
2018/07/20 Javascript
在vue中获取token,并将token写进header的方法
2018/09/26 Javascript
JavaScript动态创建二维数组的方法示例
2019/02/01 Javascript
OpenLayers3实现图层控件功能
2020/09/25 Javascript
vue项目打包后请求地址错误/打包后跨域操作
2020/11/04 Javascript
[02:23]2018DOTA2亚洲邀请赛趣味视频——反应测试
2018/04/04 DOTA
Python卸载模块的方法汇总
2016/06/07 Python
Python使用装饰器模拟用户登陆验证功能示例
2018/08/24 Python
详解python中的time和datetime的常用方法
2019/07/08 Python
利用python3 的pygame模块实现塔防游戏
2019/12/30 Python
pytorch torchvision.ImageFolder的用法介绍
2020/02/20 Python
Python-jenkins 获取job构建信息方式
2020/05/12 Python
python else语句在循环中的运用详解
2020/07/06 Python
python opencv实现直线检测并测出倾斜角度(附源码+注释)
2020/12/31 Python
CSS3 开发工具收集
2010/04/17 HTML / CSS
HTML5 预加载让页面得以快速呈现
2013/08/13 HTML / CSS
宝宝周岁宴答谢词
2014/01/26 职场文书
运动会致辞稿50字
2014/02/04 职场文书
中学劳技课教师的自我评价
2014/02/05 职场文书
党员民主生活会材料
2014/12/15 职场文书
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python