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 threading多线程编程实例
Sep 18 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
Sep 18 Python
matplotlib savefig 保存图片大小的实例
May 24 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
Aug 03 Python
python中aioysql(异步操作MySQL)的方法
Apr 11 Python
pyqt 实现QlineEdit 输入密码显示成圆点的方法
Jun 24 Python
使用python快速在局域网内搭建http传输文件服务的方法
Nov 14 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
Apr 17 Python
解决Jupyter notebook中.py与.ipynb文件的import问题
Apr 21 Python
keras-siamese用自己的数据集实现详解
Jun 10 Python
详解python中GPU版本的opencv常用方法介绍
Jul 24 Python
AI:如何训练机器学习的模型
Apr 16 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
Smarty模板快速入门
2007/01/04 PHP
PHP版自动生成文章摘要
2008/07/23 PHP
php加密算法之实现可逆加密算法和解密分享
2014/01/21 PHP
ThinkPHP中Session用法详解
2014/11/29 PHP
thinkphp分页实现效果
2016/10/13 PHP
因str_replace导致的注入问题总结
2019/08/08 PHP
stream.js 一个很小、完全独立的Javascript类库
2011/10/28 Javascript
javascript实现禁止右键和F12查看源代码
2014/12/26 Javascript
jQuery实现简单的DIV拖动效果
2016/02/19 Javascript
JavaScript数组实现数据结构中的队列与堆栈
2016/05/26 Javascript
Javascript实现代码折叠功能
2016/08/25 Javascript
JS中静态页面实现微信分享功能
2017/02/06 Javascript
JS实现求数组起始项到终止项之和的方法【基于数组扩展函数】
2017/06/13 Javascript
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
vue组件父子间通信之综合练习(聊天室)
2017/11/07 Javascript
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
Vue+mui实现图片的本地缓存示例代码
2018/05/24 Javascript
JS实现的检验身份证格式并输出出生日期,年龄,性别,出生地示例
2019/05/17 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
2019/11/07 Javascript
原生javascript单例模式的应用实例分析
2020/02/23 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
nodejs中使用worker_threads来创建新的线程的方法
2021/01/22 NodeJs
python使用urlparse分析网址中域名的方法
2015/04/15 Python
python输出指定月份日历的方法
2015/04/23 Python
简单讲解Python中的闭包
2015/08/11 Python
Python数据类型详解(二)列表
2016/05/08 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
Dune London官网:英国著名奢华鞋履品牌
2017/11/30 全球购物
实习心得体会
2014/01/02 职场文书
计算机系本科生求职信
2014/05/31 职场文书
2014年最新离婚协议书范本
2014/10/11 职场文书
机关单位保密工作责任书
2015/05/11 职场文书
开场白怎么写
2015/06/01 职场文书
大学三好学生主要事迹范文
2015/11/03 职场文书
导游词之吉林吉塔
2019/11/11 职场文书
解决Mysql的left join无效及使用的注意事项说明
2021/07/01 MySQL