通过sftp/scp/rsync/netcat上传或下载文件

在两台设备之间传输文件是常见的运维需求,常用的安全文件传输工具包括sftpscprsync以及netcat。本文将介绍如何使用这四种工具进行文件传输。

sftp、scp、rsync、netcat工具特点及使用场景说明

工具

特点及使用场景说明

sftp

使用交互式文件管理的传输方式,传输前需先与远程FTP服务器建立连接,连接后可以使用ls查看远程文件目录结构等操作。

scp

用于快速传输单个文件或整个目录。如果事先了解远端文件目录结构,可以使用scp工具。

rsync

主要用于文件同步、备份等场景,并支持增量拷贝。在需要传输大文件或网络环境较差的情况下,可以考虑使用rsync工具。

netcat

是一款功能较为完善的网络工具,不仅支持文件传输,还具备端口扫描和端口连通性测试等功能。然而,在默认情况下,netcat在传输文件时并不进行加密。因此,如果您的数据传输涉及公网环境,建议您不要直接使用netcat进行数据传输。

适用场景

  • sftpscp工具支持的操作系统包括Linux、macOS和Windows。

  • rsyncnetcat支持的操作系统包括Linux和macOS。

  • 传输文件大小限制:文件大小不受限制。

    重要

前提条件

  • ECS实例状态为运行中

  • 获取ECS实例的对外公网IP地址。

    说明

    若您的ECS实例未实现公网通信,可绑定弹性公网IP。具体操作,请参见绑定EIP

  • ECS实例所在安全组入方向已开放22端口。具体操作,请参见添加安全组规则

通过sftp工具传输文件

sftp命令会基于ssh协议对所传输的文件进行加密处理,支持SSH的完整安全性和身份验证功能。不仅具备FTP协议的所有功能,还提供了更高的安全性和可靠性。

参数说明

参数

说明

-b

设置批处理文件

-B

设置缓冲区大小

-C

使用压缩模式

-F

设置ssh配置文件

-o

设置ssh选项

-P

设置连接端口号

-R

设置最大请求数

-4

强制使用IPv4地址

-6

强制使用IPv6地址

使用示例

  • 登录远程FTP服务器

    运行如下命令,以登录远程FTP服务器,并按照提示输入远程FTP服务用户的密码。

    sftp <user-name>@<remote-ftp-server-ip>

    回显信息示例如下,说明连接远程FTP服务器成功。

    Connected to xxx.xxx.xxx.xxx.
    sftp>
  • 运行如下命令,以列出远程FTP服务器上的文件。

    ls
    说明

    如果ls不指定路径,则显示当前路径下的文件列表,如果指定路径,则显示指定路径下的文件列表。

  • 上传或下载文件/文件夹。

    • 运行以下命令,将local_folder_or_file复制到远程服务器。

      put -r local_folder_or_file remote_folder_or_file
    • 运行以下命令,将远程服务器的remote_folder_or_file复制到本地。

      get -r remote_folder_or_file local_folder_or_file
  • 断开远程ftp服务器

    您可以输入quit或者bye断开远程ftp服务器连接。

通过scp工具传输文件

大部分Linux和Windows已经内置了scp工具,您无需进行安装即可使用,SCP命令使用SSH来传输数据,并使用与SSH相同的认证模式,在需要进行验证时会要求您输入密码或口令。

特点说明

scp的特点如下:

  • scp类似于rcp,它能够保留特定文件系统上的文件属性,并支持递归拷贝子目录及其文件属性。

  • scp具备更高的文件传输保密性。然而,其代价在于在传输过程中需要输入密码,并且涉及SSH的一些配置问题,这些因素均对其使用便利性产生影响。对于有特定需求的用户而言,SCP是一种较为合适的传输工具。

参数说明

scp常用参数说明如下表所示:

参数

说明

-v

详细方式显示输出,可以用来调试连接、验证或者配置问题

-B

使用批处理模式(传输过程中不询问传输口令或短语)

-C

在复制过程中压缩文件或目录

-P

如果默认SSH端口不是22,则使用此选项指定SSH端口

-r

递归复制整个目录

-4

强制scp命令只使用IPv4地址

-6

强制scp命令只使用IPv6地址

使用示例

SCP的常用示例如下:

  • 从本地复制目录到远程服务器

    执行以下命令,将local_file复制至remote_ipremote_folder中。

    scp -r local_file remote_username@remote_ip:remote_folder
  • 从远程服务器复制目录到本地

    执行以下命令,将remote_ip中的remote_folder复制至local_file中。

    scp -r remote_username@remote_ip:remote_folder local_file

通过rsync工具传输文件

rsync是一个用于Linux/Unix系统的文件同步和传输工具。它是RCP的替代工具,rsync可通过rsh或ssh协议进行操作,也可以以守护进程模式运行。

安装说明

您需要在本地和远程服务器上安装rsync,rsync的安装方式如下:

Alibaba Cloud Linux 3/2

sudo yum install -y rsync 

CentOS 8/7/6

sudo yum install -y rsync 

Ubuntu/Debian

sudo apt install -y rsync 

参数说明

rsync常用参数说明如下表所示:

参数

说明

-v

详细模式输出

-a

归档模式,表示以递归的方式传输文件,并保持所有文件属性不变,相当于使用了组合参数-rlptgoD

-r

对子目录以递归模式处理

-l

保留软链接

-p

保持文件权限

-t

保持文件时间信息

-g

保持文件属组信息

-o

保持文件属主信息

-D

保持设备文件信息

-H

保留硬链结

-S

对稀疏文件进行特殊处理以节省DST的空间

-z

对备份的文件在传输时进行压缩处理

使用示例

按照数据传输方式的不同,rsync可以分为本地传输方式,远程传输方式以及守护程序传输方式,以下介绍不同的数据传输场景下的使用示例。

  • 本地传输方式

    • 执行以下命令,将本机的local_folder_src目录复制至local_folder_dest中。

      rsync -avSHP local_folder_src local_folder_dest
  • 远程传输方式

    • 执行以下命令,将local_folder_or_file_src复制至remote_ipremote_folder_dest中。

      rsync -avP local_folder_or_file_src remote_username@remote_ip:remote_folder_dest
    • 执行以下命令,将remote_ip中的remote_folder_src复制至local_folder_dest中。

      rsync -avP remote_username@remote_ip:remote_folder_src local_folder_dest
    • 执行以下命令,以显示远程主机remote_ipremote_folder目录下的文件列表。

      rsync --list-only remote_username@remote_ip:remote_folder
  • 守护程序传输模式

    说明
    • 如需使用守护程序传输模式,您必须事先准备一台已运行rsync守护程序的远程主机。

    • 在守护进程模式下,rsync服务器会开放873端口,以等待客户端连接。连接时,rsync服务器会对口令进行验证,若验证通过,则可以进行文件传输。在首次连接完成后,系统会进行全量文件传输,此后的连接仅需进行增量备份。

    • 有关rsync守护程序传输模式配置文件的更多信息,请参见配置文件说明

    • 拷贝远程rsync服务器(以daemon形式运行rsync)的remote_folder_src目录到本地机local_folder_dest中。

      rsync -av remote_username@remote_ip::module_name/remote_folder_src local_folder_dest
    • 拷贝本地机器local_folder_src目录文件到远程rsync服务器(以daemon形式运行rsync)的remote_folder_dest目录中。

      rsync -av local_folder_src remote_username@remote_ip::module_name/remote_folder_dest
说明

上述示例中使用到的变量说明如下:

  • local_folder_src:本地源目录

  • local_folder_dest:本地目标目录

  • local_folder_or_file_src:本地源目录或文件

  • remote_username:远程用户名

  • remote_ip:远程IP

  • remote_folder:远程目录

  • remote_folder_src:远程源目录

  • remote_folder_dest:远程目标目录

配置文件说明

rsync配置文件说明如下:

# 指定模块传输文件的守护进程UID
uid = rsync
# 指定当模块传输文件的守护进程GID
gid = rsync
# 端口号
port = 873

fake super = yes
# 使用chroot到文件系统中的目录中
use chroot = no
# 最大并发连接数
max connections = 200
timeout = 600
# 忽略某些IO错误信息
ignore errors = true
list = false
log file = /var/log/rsyncd.log         

[backup]
comment = welcome to rsync backup!
# 用来指定要备份的目录
path = /backup
# 设置false,客户端可以上传文件,true是只读
read only = false
# 设置false,客户端可以下载,true不能下载
write only = no
# 连接用户名,和linux系统用户名无关系
auth users = rsync_backup
# 验证密码文件
secrets file = /etc/rsync.passwd

通过netcat工具传输文件

netcat在网络工具中被誉为“瑞士军刀”,其功能强大,除了作为网络工具外,其传输文件的能力也不容忽视。它能够建立TCP连接、发送UDP数据包、对TCP和UDP端口进行扫描,并处理IPv4和IPv6数据包。

安装说明

执行如下命令,以安装netcat

Alibaba Cloud Linux 3/2

sudo yum install -y netcat

CentOS 8/7/6

sudo yum install -y netcat

Ubuntu/Debian

sudo apt install -y netcat

参数说明

netcat常用参数说明如下表所示:

参数

说明

-C

一直不断连接

-g <网关>

设置路由器跃程通信网关,最多可设置8个

-G <指向器数目>

设置来源路由指向器,其数值为4的倍数

-i <延迟秒数>

设置时间间隔,以便传送信息及扫描通信端口

-l

使用监听模式,管控传入的资料

-o <输出文件>

指定文件名称,将传输的数据按指定文件名以16进制进行保存

-p <通信端口>

设置本地主机使用的通信端口

-r

指定本地与远端主机的通信端口

-s <IP地址>

本地源地址

-u

使用UDP传输协议

-v

显示指令执行过程

-w <超时秒数>

设置等待连线的时间

-z

使用0输入/输出模式,只在扫描通信端口时使用

-n

直接使用IP地址,而不通过域名服务器

使用示例

ncnetcat的简写,nc的常用示例如下:

重要

以下示例使用端口号为9999,所以ECS实例所在安全组入方向需要开放9999端口。您可以结合您的情况修改为您想使用的端口,具体操作,请参见添加安全组规则

  • 使用nc命令复制文件或目录。以下示例演示如何将目录或文件从xxx.xxx.xxx.100复制到xxx.xxx.xxx.200

    • xxx.xxx.xxx.100上:安装pv工具。

      说明

      当使用nc命令传输大文件或者目录时,传输时间可能会较长,可以通过pv工具实时获取传输进度。

      Alibaba Cloud Linux 3/2

      sudo yum install -y pv

      CentOS 8/7/6

      sudo yum install -y pv

      Ubuntu/Debian

      sudo apt install -y pv
    • xxx.xxx.xxx.200上执行命令。

      nc -l 9999 | tar zxf -
    • xxx.xxx.xxx.100上执行命令。

      tar czf - dir_or_file_need_to_be_transferred | pv | nc -N xxx.xxx.xxx.200 9999
      说明
      • 示例使用的传输目录为dir_or_file_need_to_be_transferred,请根据您的实际使用情况进行替换。

      • 结合tar命令传输目录或文件时,有关文件读写权限需结合实际情况进行确认。

相关文档

  • 上传文件至ECS后,您可以对重要文件进行备份。具体操作,请参见创建快照

  • 如需上传本地文件至Windows ECS实例,请参见上传或下载文件(Windows)

  • 您还可以通过对象存储OSS来存储和管理文件。详细操作,请参见OSS快速入门

  • 如果您使用Workbench远程连接至Linux实例,您可以通过Workbench可视化地管理Linux文件,包括文件的上传和下载等操作。具体操作,请参见使用Workbench上传或下载文件