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的面向对象编程方式学习笔记
Jul 12 Python
Python 字典与字符串的互转实例
Jan 13 Python
django基础之数据库操作方法(详解)
May 24 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
Jan 02 Python
django 发送手机验证码的示例代码
Apr 25 Python
django 快速启动数据库客户端程序的方法示例
Aug 16 Python
关于python3中setup.py小概念解析
Aug 22 Python
python匿名函数lambda原理及实例解析
Feb 07 Python
pytorch中图像的数据格式实例
Feb 11 Python
Python操作dict时避免出现KeyError的几种解决方法
Sep 20 Python
python 中的@运算符使用
May 26 Python
Python实现双向链表
May 25 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
php 提速工具eAccelerator 配置参数详解
2010/05/16 PHP
php 解析xml 的四种方法详细介绍
2016/10/26 PHP
JQuery select标签操作代码段
2010/05/16 Javascript
ASP.NET jQuery 实例9  通过控件hyperlink实现返回顶部效果
2012/02/03 Javascript
定时器(setTimeout/setInterval)调用带参函数失效解决方法
2013/03/26 Javascript
javascript客户端遍历控件与获取父容器对象示例代码
2014/01/06 Javascript
jQuery控制cookie过期时间的方法
2015/04/07 Javascript
javascript入门之string对象【新手必看】
2016/11/22 Javascript
JavaScript中return用法示例
2016/11/29 Javascript
利用js给datalist或select动态添加option选项的方法
2018/01/25 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
在react-router4中进行代码拆分的方法(基于webpack)
2018/03/08 Javascript
vue-router history模式下的微信分享小结
2018/07/05 Javascript
Vue 实现拖动滑块验证功能(只有css+js没有后台验证步骤)
2018/08/24 Javascript
jquery实现掷骰子小游戏
2019/10/24 jQuery
基于Electron实现桌面应用开发代码实例
2020/07/07 Javascript
JavaScript实现串行请求的示例代码
2020/09/14 Javascript
[01:27:43]VGJ.S vs TNC Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
Python对数据库操作
2016/03/28 Python
Python脚本实现自动将数据库备份到 Dropbox
2017/02/06 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
2017/08/30 Python
Python干货:分享Python绘制六种可视化图表
2018/08/27 Python
Python Pandas实现数据分组求平均值并填充nan的示例
2019/07/04 Python
python @propert装饰器使用方法原理解析
2019/12/25 Python
详解python logging日志传输
2020/07/01 Python
selenium如何定位span元素的实现
2021/01/13 Python
用JAVA SOCKET编程,读服务器几个字符,再写入本地显示
2012/11/25 面试题
优秀员工年终发言演讲稿
2014/01/01 职场文书
开会迟到检讨书
2014/01/08 职场文书
英语专业职业生涯规划范文
2014/03/05 职场文书
2014年中职班主任工作总结
2014/12/16 职场文书
员工聘用合同范本
2015/09/21 职场文书
小学语文教学反思范文
2016/03/03 职场文书
Python学习之时间包使用教程详解
2022/03/21 Python
Dashboard管理Kubernetes集群与API访问配置
2022/04/01 Servers
Go语言怎么使用变长参数函数
2022/07/15 Golang