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 19 Python
centos 下面安装python2.7 +pip +mysqld
Nov 18 Python
探究python中open函数的使用
Mar 01 Python
Django框架实现逆向解析url的方法
Jul 04 Python
numpy添加新的维度:newaxis的方法
Aug 02 Python
Linux下多个Python版本安装教程
Aug 15 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
Jun 04 Python
Django 对象关系映射(ORM)源码详解
Aug 06 Python
python将图片转base64,实现前端显示
Jan 09 Python
Python连接Impala实现步骤解析
Aug 04 Python
详解基于python的全局与局部序列比对的实现(DNA)
Oct 07 Python
python爬虫筛选工作实例讲解
Nov 23 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
颠覆常识!无色透明的咖啡诞生了(中日双语)
2021/03/03 咖啡文化
PHP VS ASP
2006/10/09 PHP
MYSQL环境变量设置方法
2007/01/15 PHP
Memcache 在PHP中的使用技巧
2010/02/08 PHP
PHP读取文件的常见几种方法
2016/11/03 PHP
PHP crypt()函数的用法讲解
2019/02/15 PHP
js事件(Event)知识整理
2012/10/11 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
2014/08/22 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
2016/10/27 Javascript
jquery对所有input type=text的控件赋值实现方法
2016/12/02 Javascript
走进javascript——不起眼的基础,值和分号
2017/02/24 Javascript
vue组件中点击按钮后修改输入框的状态实例代码
2017/04/14 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
2020/05/30 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
2018/09/15 Javascript
JS实现textarea通过换行或者回车把多行数字分割成数组并且去掉数组中空的值
2018/10/29 Javascript
JavaScript 斐波那契数列 倒序输出 输出100以内的质数代码实例
2019/09/11 Javascript
Vue实现base64编码图片间的切换功能
2019/12/04 Javascript
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
[06:53]2018DOTA2国际邀请赛寻真——为复仇而来的Newbee
2018/08/15 DOTA
在Python的Django框架中创建和使用模版
2015/07/15 Python
Python使用三种方法实现PCA算法
2017/12/12 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
2017/12/25 Python
Python基于多线程实现ping扫描功能示例
2018/07/23 Python
Python判断telnet通不通的实例
2019/01/26 Python
Python 把序列转换为元组的函数tuple方法
2019/06/27 Python
Python shutil模块用法实例分析
2019/10/02 Python
Python 实现自动导入缺失的库
2019/10/29 Python
python中查看.db文件中表格的名字及表格中的字段操作
2020/07/07 Python
Speedo速比涛中国官方网站:全球领先泳装运动品牌
2018/04/24 全球购物
New Balance德国官方网站:购买鞋子和服装
2019/08/31 全球购物
优秀班集体获奖感言
2014/02/03 职场文书
《海伦?凯勒》教学反思
2014/04/17 职场文书
工作目标责任书
2014/07/23 职场文书
2014年初三班主任工作总结
2014/12/05 职场文书
英文产品推荐信
2015/03/27 职场文书