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利用hook技术破解https的实例代码
Mar 25 Python
python正则匹配查询港澳通行证办理进度示例分享
Dec 27 Python
Python反射和内置方法重写操作详解
Aug 27 Python
解决PyCharm同目录下导入模块会报错的问题
Oct 13 Python
python连接mongodb密码认证实例
Oct 16 Python
使用PM2+nginx部署python项目的方法示例
Nov 07 Python
python实现网站微信登录的示例代码
Sep 18 Python
TensorFlow设置日志级别的几种方式小结
Feb 04 Python
windows python3安装Jupyter Notebooks教程
Apr 13 Python
浅析Python 抽象工厂模式的优缺点
Jul 13 Python
python3让print输出不换行的方法
Aug 24 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
Jan 05 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运行环境教程
2015/02/12 PHP
SESSION存放在数据库用法实例
2015/08/08 PHP
PHP函数rtrim()使用中的怪异现象分析
2017/02/24 PHP
PHP 实现重载
2021/03/09 PHP
Js 订制自己的AlertBox(信息提示框)
2009/01/09 Javascript
jquery lazyload延迟加载技术的实现原理分析
2011/01/24 Javascript
IE6下focus与blur错乱的解决方案
2011/07/31 Javascript
jquery dialog open后,服务器端控件失效的快速解决方法
2013/12/19 Javascript
在HTML中插入JavaScript代码的示例
2015/06/03 Javascript
简介JavaScript中的italics()方法的使用
2015/06/08 Javascript
小巧强大的jquery layer弹窗弹层插件
2015/12/06 Javascript
jQuery子元素过滤选择器用法示例
2016/09/09 Javascript
jquery 给动态生成的标签绑定事件的几种方法总结
2018/02/24 jQuery
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能
2018/08/12 Javascript
JavaScript事件对象深入详解
2018/12/30 Javascript
javascript实现遮罩层动态效果实例
2019/05/14 Javascript
layui 上传文件_批量导入数据UI的方法
2019/09/23 Javascript
webpack优化之代码分割与公共代码提取详解
2019/11/22 Javascript
python字典get()方法用法分析
2015/04/17 Python
python爬取足球直播吧五大联赛积分榜
2018/06/13 Python
如何基于Python获取图片的物理尺寸
2019/11/25 Python
python能否java成为主流语言吗
2020/06/22 Python
Python制作数据预测集成工具(值得收藏)
2020/08/21 Python
Python常用数字处理基本操作汇总
2020/09/10 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
日本最大化妆品和美容产品的综合口碑网站:cosme shopping
2019/08/28 全球购物
写好自荐信的几个要点
2013/12/26 职场文书
秘书行业自我鉴定范文
2013/12/30 职场文书
面试后感谢信
2014/02/01 职场文书
老同学聚会感言
2014/02/23 职场文书
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
担保书格式范文
2015/09/22 职场文书
jdbc使用PreparedStatement批量插入数据的方法
2021/04/27 MySQL
Spring Boot两种全局配置和两种注解的操作方法
2021/06/29 Java/Android
动画《平凡职业成就世界最强》宣布制作OVA
2022/04/01 日漫