Skip to main content

往服务器传输文件(SCP/Rsync/SFTP/tar)

1. 需求说明

有时,我们需要往服务器上传一些文件,如 SSL证书、网站配置 等。这时就需要在本地计算机和服务器系统之间进行文件传输,这里分别介绍几种常见的方式。

2. 常用工具

2.1. SCP命令

2.1.1. SCP介绍

SCP(Secure Copy)是基于 SSH 协议的文件传输命令,使用与 SSH 相同的认证方式和安全加密。其主要特点为简单、直接。

  • 工作原理:在 SSH 连接的基础上进行文件复制。
  • 优点
    • 几乎所有 Linux 系统都自带,无需额外安装。
    • 命令简单直观,易于上手。
    • 传输是加密的,安全性好。
  • 缺点
    • 效率较低:尤其是传输大量小文件时,因为它不进行增量传输,每次都是全量拷贝。
    • 功能单一:缺少高级功能,如断点续传、实时同步等。
    • 无法查看传输进度:在传输大文件时,无法直观地看到进度百分比(虽然可以通过-v参数看到细节,但不直观)。

2.1.2. 安装方法

在绝大多数 Linux 发行版中,SCP 已经作为 OpenSSH 客户端的一部分被预装。

1. 检查是否安装

scp
# 如果提示command not found则说明未安装,如果提示usage: XXX说明已安装,可正常使用。

2. 安装SCP

如果未安装(极少情况),可以通过包管理器安装 OpenSSH 客户端。

  • CentOS/RHEL/Alibaba Cloud Linux
sudo yum install openssh-clients
# 或者使用 dnf(新版本)
sudo dnf install openssh-clients
  • Ubuntu/Debian
sudo apt update
sudo apt install openssh-client

2.1.3. 基本语法

# 上传本地文件到服务器
scp -r /本地/目录/路径/ username@服务器IP:/远程/目录/路径/

# 从服务器下载文件到本地
scp -r username@服务器IP:/远程/目录/路径/ /本地/目录/路径/

2.1.4. Demo演示

# 上传整个目录
scp -r /home/user/documents/ root@192.168.1.100:/var/www/html/

# 上传多个特定文件
scp file1.txt file2.jpg file3.zip root@192.168.1.100:/tmp/

2.2. Rsync命令

2.2.1. Rsync介绍

Rsync(Remote Synchronization) 意为远程同步,它是一款功能强大的文件同步工具,支持本地和跨网络的文件同步,通过增量同步机制,仅传输有变化的部分,从而显著提升同步效率。其核心优势在于增量同步。

  • 工作原理:通过比较源和目标文件的差异,只传输文件中被修改的部分,从而极大提高效率。
  • 优点
    • 高效:增量传输,节省带宽和时间,特别适合备份和同步大量文件。
    • 功能丰富:支持保留文件属性(权限、时间戳等)、排除特定文件、断点续传、压缩传输等。
    • 灵活性高:既可以作为远程命令使用(基于 SSH),也可以以守护进程模式运行(用于大规模备份)。
  • 缺点
    • 命令参数比 SCP 复杂,学习曲线稍高。
    • 默认情况下,传输大量小文件时,比较差异的过程可能比 SCP 直接传输稍慢(但传输阶段更快)。使用-W参数可以关闭增量检测,变成类似 SCP 的全量拷贝。

2.2.2. 安装方法

Rsync非常流行,但可能在某些极简系统镜像中未预装。

1. 检查是否安装

rsync --version

2. 安装Rsync

如果未安装,使用包管理器安装:

  • CentOS/RHEL/Alibaba Cloud Linux
sudo yum install rsync
# 或
sudo dnf install rsync
  • Ubuntu/Debian
sudo apt update
sudo apt install rsync

2.2.3. 基本语法

# 同步本地目录到服务器
rsync -avz -e ssh /本地/目录/路径/ username@服务器IP:/远程/目录/路径/

# 从服务器同步到本地
rsync -avz -e ssh username@服务器IP:/远程/目录/路径/ /本地/目录/路径/

2.2.4. 常用参数

  • -a:归档模式,保留文件属性
  • -v:显示详细过程
  • -z:压缩传输
  • -P:显示进度和断点续传

2.2.5. Demo演示

# 同步文件并显示进度
rsync -avzP -e ssh /home/user/backup/ root@192.168.1.100:/backup/

2.3. SFTP批量传输

2.3.1. SFTP介绍

SFTP(SSH File Transfer Protocol) 是基于SSH的文件传输协议,也是一个工具。但它提供了一个交互式的文件管理环境,类似于FTP,但更加安全。

  • 工作原理:通过 SSH 连接建立一个安全的“通道”,在此通道内进行文件列表、上传、下载、删除、创建目录等操作。
  • 优点
    • 交互式操作:可以像在本地一样浏览远程服务器目录结构,再决定上传或下载哪些文件,非常灵活。
    • 功能全面:不仅限于传输,还包括完整的文件管理功能(重命名、删除、修改权限等)。
    • 安全性高:所有操作都在加密的 SSH 连接中进行。
  • 缺点
    • 不适合完全自动化:虽然支持批处理脚本,但其交互式本性在编写全自动脚本时不如 SCP 和 Rsync 直接。
    • 传输效率:与 SCP 类似,通常不如 Rsync 高效。

2.3.2. 安装方法

和 SCP 一样,SFTP 客户端也是 OpenSSH 套件的一部分。只要你能够使用 SSH 连接服务器,就可以使用 SFTP。

  • 检查是否安装:能使用ssh命令,就能使用sftp命令。
sftp
# 如果提示命令未找到,则安装openssh-client(方法同SCP)

2.3.3. 交互式SFTP

sftp username@服务器IP
sftp> put -r /本地/目录/*
sftp> exit

2.3.4. 非交互式SFTP脚本

#!/bin/bash
sftp username@服务器IP <<EOF
put -r /本地/目录/*
bye
EOF

2.4. tar命令

2.4.1. tar介绍

TARTape ARchive的缩写,最初用于将文件备份到磁带。现在的主要功能是:

  • 打包:将多个文件或目录合并成单个文件(归档文件),后缀通常是 .tar
  • 压缩:配合压缩算法(如 gzip、bzip2)减小归档文件的大小,生成 .tar.gz, .tar.bz2 等文件。

核心功能特点

  • 保留文件属性:可以保留文件的权限、所有者、时间戳等元数据。
  • 处理目录结构:递归地处理整个目录树。
  • 流式处理:可以将打包/压缩的结果直接通过管道输出,非常适合网络传输。

2.4.2. 安装方法

在绝大多数 Linux 发行版中,tar预装的核心工具之一。

1. 检查是否已安装

tar --version

2. 安装tar:

如果极少数情况未安装,可以使用包管理器安装。

  • CentOS/RHEL/Alibaba Cloud Linux:
sudo yum install tar
# 或
sudo dnf install tar
  • Ubuntu/Debian:
sudo apt update
sudo apt install tar

2.4.3. 基本语法

# 压缩并传输
tar czf - /本地/目录/ | ssh username@服务器IP "cd /远程/目录/ && tar xzf -"

# 从服务器获取并解压
ssh username@服务器IP "tar czf - /远程/目录/" | tar xzf - -C /本地/目录/

3. 比较 SCP/Rsync/SFTP/tar

特性SCPRsyncSFTPtar + SSH 管道
核心功能简单加密复制智能增量同步交互式文件管理流式打包传输
传输效率非常高(增量)(无中间文件)
带宽使用高(全量)(只传变化部分)高(全量)中(全量但压缩)
自动化程度非常高中(需脚本)
交互性(可浏览)
保留属性(可配置)
断点续传支持部分客户端支持
适用场景传几个小文件同步大量文件/备份探索性上传下载迁移大目录/数据库
易用性非常简单参数复杂需学习直观易上手命令复杂