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基础教程之实现石头剪刀布游戏示例
Feb 11 Python
Python3写入文件常用方法实例分析
May 22 Python
利用python如何处理百万条数据(适用java新手)
Jun 06 Python
Python中栈、队列与优先级队列的实现方法
Jun 30 Python
django中forms组件的使用与注意
Jul 08 Python
Python+pyplot绘制带文本标注的柱状图方法
Jul 08 Python
Python 如何优雅的将数字转化为时间格式的方法
Sep 26 Python
Django 如何使用日期时间选择器规范用户的时间输入示例代码详解
May 22 Python
Python参数传递对象的引用原理解析
May 22 Python
Django form表单与请求的生命周期步骤详解
Jun 07 Python
Python pip install之SSL异常处理操作
Sep 03 Python
python标准库ElementTree处理xml
May 20 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
MySQL的FIND_IN_SET函数使用方法分享
2012/03/27 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
2014/06/13 PHP
微信利用PHP创建自定义菜单的方法
2016/08/01 PHP
JavaScript 组件之旅(四):测试 JavaScript 组件
2009/10/28 Javascript
JQuery之拖拽插件实现代码
2011/04/14 Javascript
js 有框架页面跳转(target)三种情况下的应用
2013/04/09 Javascript
JS.getTextContent(element,preformatted)使用介绍
2013/09/21 Javascript
js中如何复制一个对象并获取其所有属性和属性对应的值
2013/10/24 Javascript
JS模拟bootstrap下拉菜单效果实例
2016/06/17 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
2016/08/31 Javascript
js获取腾讯视频ID的方法
2016/10/03 Javascript
移动开发之自适应手机屏幕宽度
2016/11/23 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
如何编写一个d.ts文件的步骤详解
2018/04/13 Javascript
浅谈redux以及react-redux简单实现
2018/08/28 Javascript
vue基础之v-bind属性、class和style用法分析
2019/03/11 Javascript
小程序如何使用分包加载的实现方法
2019/05/22 Javascript
JS数组方法concat()用法实例分析
2020/01/18 Javascript
深入理解javascript中的this
2021/02/08 Javascript
python写的一个squid访问日志分析的小程序
2014/09/17 Python
python3 实现的人人影视网站自动签到
2016/06/19 Python
Python基础之getpass模块详细介绍
2017/08/10 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
2017/11/21 Python
详解Python在七牛云平台的应用(一)
2017/12/05 Python
python下载微信公众号相关文章
2019/02/26 Python
python单线程下实现多个socket并发过程详解
2019/07/27 Python
Python3连接Mysql8.0遇到的问题及处理步骤
2020/02/17 Python
Python新手如何理解循环加载模块
2020/05/29 Python
python简单利用字典破解zip文件口令
2020/09/07 Python
美德好少年事迹材料
2014/01/19 职场文书
《要下雨了》教学反思
2014/02/17 职场文书
第二次离婚起诉书
2015/05/18 职场文书
小学教师教育随笔
2015/08/14 职场文书
Python可视化学习之seaborn绘制矩阵图详解
2022/02/24 Python