Python使用Paramiko远程复制文件与目录完整指南

温以宁
温以宁
发布时间:2026-10-13 | 6人浏览过
原创

本文介绍如何利用Python的Paramiko模块通过SSH2协议实现远程服务器文件及目录的本地备份。文章详细解析了单文件复制方法,并针对文件夹批量下载场景,提供了包含遍历逻辑的改进版代码,涵盖安装依赖、连接配置及异常处理等关键步骤。

Python使用Paramiko远程复制文件与目录完整指南

在近期进行的运维自动化平台开发工作中,需要编写多个小型功能模块以支持日常操作。

在此分享一段使用Python的paramiko库实现特定功能的代码示例。

该功能旨在将远程服务器上的指定文件及文件夹目录完整复制至本地指定目录。

Paramiko模块简介与安装

首先对paramiko库进行简要说明:

paramiko是基于Python编写的模块,遵循SSH2协议标准,支持以加密和认证方式连接远程服务器。利用该模块,可以便捷地进行SSH连接、通过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 相关产品和应用

全部下载

专题列表