在两台设备之间传输文件是常见的运维需求,常用的安全文件传输工具包括sftp
、scp
、rsync
以及netcat
。本文将介绍如何使用这四种工具进行文件传输。
适用场景
sftp
和scp
工具支持的操作系统包括Linux、macOS和Windows。rsync
和netcat
支持的操作系统包括Linux和macOS。传输文件大小限制:文件大小不受限制。
重要若您的本地主机为Windows系统,除了选择
sftp
和scp
命令行工具之外,也可以使用图形界面的WinSCP
工具进行文件传输,有关操作,请参见通过WinSCP上传或下载文件(本地主机为Windows)。以下情况,还可以通过Workbench或云助手上传下载文件(不限制本地主机类型):
(单个文件不大于500 MB)通过Workbench工具上传或下载。具体操作,请参见使用Workbench上传或下载文件。
(单个文件不大于24 KB)通过云助手上传文件至ECS。具体操作,请参见通过云助手上传本地文件到ECS实例。
前提条件
通过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 | 强制 |
-6 | 强制 |
使用示例
SCP的常用示例如下:
从本地复制目录到远程服务器
执行以下命令,将
local_file
复制至remote_ip
的remote_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_ip
的remote_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_ip
中remote_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地址,而不通过域名服务器 |
使用示例
nc
是netcat
的简写,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上传或下载文件。