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统计列表中的重复项出现的次数的方法
Aug 18 Python
Python使用scrapy抓取网站sitemap信息的方法
Apr 08 Python
python操作redis的方法
Jul 07 Python
详解python发送各类邮件的主要方法
Dec 22 Python
Python之用户输入的实例
Jun 22 Python
pandas 根据列的值选取所有行的示例
Nov 07 Python
django迁移数据库错误问题解决
Jul 29 Python
python框架flask表单实现详解
Nov 04 Python
Flask中endpoint的理解(小结)
Dec 11 Python
PyTorch实现更新部分网络,其他不更新
Dec 31 Python
Python实现ATM系统
Feb 17 Python
Python基于mediainfo批量重命名图片文件
Dec 29 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不用递归遍历目录下所有文件的代码
2014/07/04 PHP
PHP书写格式详解(必看)
2016/05/23 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
2016/09/23 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
Javascript 面向对象 继承
2010/05/13 Javascript
浅谈JavaScript数据类型
2015/03/03 Javascript
JavaScript实现可拖拽的拖动层Div实例
2015/08/05 Javascript
探讨JavaScript语句的执行过程
2016/01/28 Javascript
使用jQuery UI库开发Web界面的简单入门指引
2016/04/22 Javascript
js微信支付实现代码
2016/12/22 Javascript
javascript遍历json对象的key和任意js对象属性实例
2017/03/09 Javascript
Node 搭建一个静态资源服务器的实现
2019/05/20 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
解决Nuxt使用axios跨域问题
2020/07/06 Javascript
js实现浏览器打印功能的示例代码
2020/07/15 Javascript
OpenLayers3实现对地图的基本操作
2020/09/28 Javascript
Nodejs 数组的队列以及forEach的应用详解
2021/02/25 NodeJs
[00:32]2018DOTA2亚洲邀请赛Newbee出场
2018/04/03 DOTA
python实现颜色空间转换程序(Tkinter)
2015/12/31 Python
简单易懂的python环境安装教程
2017/07/13 Python
Python编程之gui程序实现简单文件浏览器代码
2017/12/08 Python
50行Python代码实现人脸检测功能
2018/01/23 Python
Python基础教程之内置函数locals()和globals()用法分析
2018/03/16 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
2020/02/10 Python
利用 Python ElementTree 生成 xml的实例
2020/03/06 Python
python批量修改文件名的示例
2020/09/27 Python
Jupyter安装链接aconda实现过程图解
2020/11/02 Python
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
2013/02/17 面试题
计算机专业推荐信范文
2013/11/20 职场文书
学前教育求职自荐信范文
2013/12/25 职场文书
党员个人整改方案及措施
2014/10/25 职场文书
2014幼儿园小班工作总结
2014/11/10 职场文书
2019奶茶店创业计划书范本,值得你借鉴
2019/08/14 职场文书
导游词之烟台威海蓬莱
2019/11/14 职场文书
深入理解python协程
2021/06/15 Python