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函数帮助查询小工具
Mar 13 Python
python使用Flask框架获取用户IP地址的方法
Mar 21 Python
Linux 发邮件磁盘空间监控(python)
Apr 23 Python
解决pycharm界面不能显示中文的问题
May 23 Python
Python实现动态添加属性和方法操作示例
Jul 25 Python
Python数据集切分实例
Dec 08 Python
漂亮的Django Markdown富文本app插件的实现
Jan 02 Python
对python pandas读取剪贴板内容的方法详解
Jan 24 Python
pytorch中获取模型input/output shape实例
Dec 30 Python
python使用python-pptx删除ppt某页实例
Feb 14 Python
Python爬虫教程之利用正则表达式匹配网页内容
Dec 08 Python
python数字转对应中文的方法总结
Aug 02 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获取服务器时间的实现代码
2013/06/07 PHP
php封装的验证码工具类完整实例
2016/10/19 PHP
Yii框架实现对数据库的CURD操作示例
2019/09/03 PHP
JS解密入门之凭直觉解
2008/06/25 Javascript
javascript replace()正则替换实现代码
2010/02/26 Javascript
js创建数组的简单方法
2016/07/27 Javascript
js实现四舍五入完全保留两位小数的方法
2016/08/02 Javascript
ES6通过babel转码使用webpack使用import关键字
2016/12/13 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
2016/12/28 Javascript
浅谈sass在vue注意的地方
2017/08/10 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
详解vue中axios的使用与封装
2019/03/20 Javascript
[47:10]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第二场 12.16
2020/12/18 DOTA
C#返回当前系统所有可用驱动器符号的方法
2015/04/18 Python
python3.5实现socket通讯示例(TCP)
2017/02/07 Python
python实现远程通过网络邮件控制计算机重启或关机
2018/02/22 Python
通过Python 接口使用OpenCV的方法
2018/04/02 Python
python多个模块py文件的数据共享实例
2019/01/11 Python
Python txt文件加入字典并查询的方法
2019/01/15 Python
python redis 删除key脚本的实例
2019/02/19 Python
python实现while循环打印星星的四种形状
2019/11/23 Python
关于tensorflow的几种参数初始化方法小结
2020/01/04 Python
Python3如何判断三角形的类型
2020/04/12 Python
详解tensorflow之过拟合问题实战
2020/11/01 Python
Python OpenCV中的numpy与图像类型转换操作
2020/12/11 Python
利用HTML5的新特点实现图片文件异步上传
2014/05/29 HTML / CSS
html5 外链式实现加减乘除的代码
2019/09/04 HTML / CSS
SCHIESSER荷兰官方网站:德国内衣专家
2020/10/09 全球购物
ktv好的活动方案
2014/08/17 职场文书
医院我们的节日活动实施方案
2014/08/22 职场文书
学习十八大标语
2014/10/09 职场文书
大学生见习报告总结
2014/11/04 职场文书
2015年秋季小班开学寄语
2015/05/27 职场文书
辩论赛新闻稿
2015/07/17 职场文书
预备党员入党感言
2015/08/01 职场文书
css3 选择器
2022/05/11 HTML / CSS