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 SQLite3数据库操作类分享
Jun 10 Python
Python挑选文件夹里宽大于300图片的方法
Mar 05 Python
Django中对数据查询结果进行排序的方法
Jul 17 Python
PyQt5实现下载进度条效果
Apr 19 Python
Python提取支付宝和微信支付二维码的示例代码
Feb 15 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
Jun 04 Python
Python Web框架之Django框架文件上传功能详解
Aug 16 Python
Python3实现二叉树的最大深度
Sep 30 Python
python文字转语音实现过程解析
Nov 12 Python
常用的10个Python实用小技巧
Aug 10 Python
如何使用PyCharm引入需要使用的包的方法
Sep 22 Python
python给list排序的简单方法
Dec 10 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
yii实现级联下拉菜单的方法
2014/07/31 PHP
PHP速成大法
2015/01/30 PHP
php从给定url获取文件扩展名的方法
2015/03/14 PHP
PHP中利用sleep函数实现定时执行功能实现代码
2016/08/25 PHP
php实现将base64格式图片保存在指定目录的方法
2016/10/13 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
2020/05/02 PHP
JavaScript 学习笔记(四)
2009/12/31 Javascript
Extjs实现进度条的两种便捷方式
2013/09/26 Javascript
php读取sqlite数据库入门实例代码
2014/06/25 Javascript
jquery+php实现搜索框自动提示
2014/11/28 Javascript
Jquery api 速查表分享
2015/01/12 Javascript
JavaScript定义数组的三种方法(new Array(),new Array('x','y')
2016/10/04 Javascript
JS版微信6.0分享接口用法分析
2016/10/13 Javascript
JS中事件冒泡和事件捕获介绍
2016/12/13 Javascript
form表单数据封装成json格式并提交给服务器的实现方法
2017/12/14 Javascript
Javascript 实现 Excel 导入生成图表功能
2018/10/22 Javascript
NodeJS实现一个聊天室功能
2019/11/25 NodeJs
python中日志logging模块的性能及多进程详解
2017/07/18 Python
python读取一个目录下所有txt里面的内容方法
2018/06/23 Python
Python中使用Counter进行字典创建以及key数量统计的方法
2018/07/06 Python
Flask Web开发入门之文件上传(八)
2018/08/17 Python
python 模拟银行转账功能过程详解
2019/08/06 Python
Python 列表的清空方式
2020/01/13 Python
python实现tail -f 功能
2020/01/17 Python
Python基于xlutils修改表格内容过程解析
2020/07/28 Python
Flask中sqlalchemy模块的实例用法
2020/08/02 Python
python使用scapy模块实现ARP扫描的过程
2021/01/21 Python
使用HTML5的表单验证的简单示例
2015/09/09 HTML / CSS
试用期员工考核制度
2014/01/22 职场文书
护士岗位求职应聘自荐书范文
2014/02/12 职场文书
网络营销策划方案
2014/06/04 职场文书
教育系统干部作风整顿心得体会
2014/09/09 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
SQL写法--行行比较
2021/08/23 SQL Server
Python基本知识点总结
2022/04/07 Python