通过sftp/scp/rsync向Linux实例传输文件

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

当本机为LinuxmacOS系统时,目标实例为Linux系统且具有公网IP时,您可以参考本文通过sftpscprsync等工具进行文件上传下载的操作。

工具介绍&对比

特性

SCP

SFTP

Rsync

功能

快速上传/下载单个文件或目录。

  • 交互式文件传输。

  • 支持文件管理。

  • 支持断点续传。

增量同步(仅传输差异部分)。

交互

命令行一次性操作。

支持交互式命令(类似FTP客户端)。

命令行或脚本化操作。

场景

  • 简单快速传输少量文件。

  • 临时传输且无需保留传输进度(如配置文件更新等)。

  • 需要进行文件管理操作。

  • 网络不稳定,需要断点续传功能。

  • 定期备份、大规模数据同步等场景。

  • 需增量传输以节省带宽和时间。

使用限制

本地系统限制

实例网络限制

文件大小限制

传输速度限制

文件数量限制

LinuxmacOS

需要开通公网IPEIP

准备工作

  • 检查实例状态:只有运行中的实例支持本文操作。

    检查实例运行状态

    实例运行状态可以在ECS控制台中的实例模块查看,运行中的实例如图所示:

    查看实例状态的操作说明,请参见查看实例信息

    image

  • 获取实例的公网IP地址:在本文操作中需要使用实例的公网IP连接实例。

    获取实例公网IP信息

    实例的公网IP地址可以在ECS控制台的实例模块查看,如图所示:

    查看实例信息的操作说明,请参见查看实例信息。如何开通公网,请参见开通公网

    image

  • 检查实例所在安全组:使用本文工具向实例传输文件时,需要检查安全组是否已经放通对应工具服务的连接端口(默认22)。

    本文操作所需安全组设置

    使用配置安全组规则的具体操作,请参见添加安全组规则

    授权策略

    优先级

    协议类型

    端口范围

    授权对象

    允许

    1

    自定义TCP

    配置为您对应文件传输服务的端口(默认为22)。

    配置为您本地计算机的公网地址或IP地址段。

    警告

    使用0.0.0.0/0,代表所有IP地址均可以连接远程服务端口,该配置存在安全风险,请谨慎使用。

    您可以通过https://cip.cc/获取您的本机IP地址。

    例如本地计算机IP118.xxx.xxx.xx8,需完成以下配置。

    image

通过SCP工具传输文件

SCP(Secure Copy Protocol)是一种基于SSH(Secure Shell)协议的文件传输协议,它提供了安全的文件传输、复制和管理功能。基本用法如下:

  • 上传文件

    需要上传文件或文件夹到实例时,可以在本地执行以下命令,执行命令后,可能会提示您输入密码。

    # 上传单个文件到实例
    scp <本地文件路径> <云服务器登录名>@<云服务器公网IP地址>:<实例目录>
    
    # 上传本地目录到实例
    scp -r <本地目录> <云服务器登录名>@<云服务器公网IP地址>:<实例目录>
  • 下载文件

    需要从实例下载文件到本地时,可以在本地执行以下命令,执行命令后,可能会提示您输入密码。

    # 下载单个文件到本地
    scp <云服务器登录名>@<云服务器公网IP地址>:<实例文件路径> <本地目录>
    
    # 下载实例目录到本地
    scp -r <云服务器登录名>@<云服务器公网IP地址>:<实例目录> <本地目录>

示例

  • 将本地的/opt/test.txt文件上传到公网IP1xx.xxx.xxx.121实例的/home/ecs-user/路径下,可通过以下命令实现:

    scp /opt/test.txt ecs-user@1xx.xxx.xxx.121:/home/ecs-user/
  • 将公网IP1xx.xxx.xxx.121实例的/home/ecs-user/test.txt文件下载到本地的/opt/路径下,可通过以下命令实现:

    scp ecs-user@1xx.xxx.xxx.121:/home/ecs-user/test.txt /opt/

使用SCP时指定端口

SCP默认使用的是SSH协议的22端口,如果您修改了SSH服务的端口,可以在执行命令时,通过-P参数指定端口,命令如下:

# 上传单个文件到实例,并指定SSH端口
scp -P <SSH服务端口> <本地文件路径> <云服务器登录名>@<云服务器公网IP地址>:<实例目录>

使用SCP时指定私钥文件(密钥对认证)

如果您为实例绑定了密钥对,在连接实例时可以通过-i参数指定私钥文件,命令如下:

scp -i <私钥文件路径> <本地文件路径> <云服务器登录名>@<云服务器公网IP地址>:<实例目录>

通过SFTP工具传输文件

SFTP(SSH File Transfer Protocol)是基于SSH协议的交互式文件传输工具,支持文件管理、断点续传等特性。具体操作步骤如下:

1. 连接云服务器实例

在本机终端,输入以下命令连接云服务器ECS实例。

sftp <云服务器实例登录名>@<云服务器实例公网IP地址>

如图所示,连接成功后显示如下内容。

image

示例

例如使用ecs-user连接公网IP1xx.xxx.xxx.121的实例时,可以使用以下命令:

sftp ecs-user@1xx.xxx.xxx.121

使用SFTP连接实例时指定端口

如果您修改了SFTP服务的端口,在连接实例时可以通过-P参数指定实例SFTP服务的端口,命令如下:

sftp -P <端口> <云服务器登录名>@<云服务器公网IP地址>

使用SFTP连接实例时指定私钥文件(密钥对认证)

如果您为实例绑定了密钥对,在连接实例时可以通过-oIdentityFile参数指定私钥文件,命令如下:

sftp -oIdentityFile=<私钥文件路径> <云服务器登录名>@<云服务器公网IP地址>

2. 上传/下载文件

  • 从本地上传文件或整个目录到实例

    # 上传单个文件
    sftp> put <本地文件> <实例目录>
    
    # 上传整个目录
    sftp> put -r <本地目录> <实例目录>
  • 从实例下载文件或整个目录到本地

    # 下载单个文件
    sftp> get <实例文件> <本地目录>
    
    # 下载整个目录
    sftp> get -r <实例目录> <本地目录>

示例

  • 将本机/opt/test.txt文件上传至实例的/home/ecs-user/目录下:

    sftp> put /opt/test.txt /home/ecs-user
  • 将本机/opt/test/目录上传至实例的/home/ecs-user/目录下:

    sftp> put -r /opt/test/ /home/ecs-user/
  • 将实例的/home/ecs-user/test.txt文件下载至本机的/opt目录下:

    sftp> get /home/ecs-user/test.txt /opt
  • 将实例的/home/ecs-user/test/目录下载至本地的/opt目录下:

    sftp> get -r /home/ecs-user/test/ /opt

3. 断点续传(传输中断时使用)

当大文件传输中断时,可使用 reget和 reput替换步骤2中的getput命令,继续传输文件:

# 继续上传
sftp> reput <本地文件> <实例目录>

# 继续下载
sftp> reget <实例文件> <本地目录>

4. 断开连接

当完成传输任务后,可以通过quitbye命令退出SFTP。

sftp> quit
sftp> bye

通过Rsync工具传输文件

rsync是一个用于Linux/Unix系统的文件同步和传输工具。使用该工具,可以实现将本地文件上传到实例,或从实例下载文件到本地,此外,rsync还支持目录同步功能,rsync工具的安装及使用步骤如下:

1. 安装工具

首先您需要在本地和远程服务器上安装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 

2. 使用rsync上传/下载文件

  • 上传单个文件

    当需要上传文件到实例时,可以在本地执行以下命令,执行命令后,可能会提示您输入密码。

    rsync -avz -e ssh <本地文件或文件夹路径> <云服务器实例登录名>@<云服务器实例公网IP地址>:<实例目录>
  • 下载单个文件

    当需要从实例下载文件到本地时,可以在本地执行以下命令,执行命令后,可能会提示您输入密码。

    rsync -avz -e ssh <云服务器实例登录名>@<云服务器实例公网IP地址>:<实例文件或文件夹路径> <本地目录>
  • 同步本地某个目录到ECS实例(上传目录)

    当需要从本地将整个文件夹上传(或同步到)实例时,可以在本地执行以下命令,执行命令后,可能会提示您输入密码。

    rsync -avz -e ssh <本地文件夹路径> <云服务器实例登录名>@<云服务器实例公网IP地址>:<实例目录>
  • 同步ECS实例的某个目录到本地(下载目录)

    当需要从实例将整个文件夹下载(或同步到)本地时,可以在本地执行以下命令,执行命令后,可能会提示您输入密码。

    rsync -avz -e ssh <云服务器实例登录名>@<云服务器实例公网IP地址>:<实例文件夹路径> <本地目录>

示例

  • /opt/test.txt文件上传至公网IP1xx.xxx.xxx.121实例的/home/ecs-user目录下,可使用以下命令:

    rsync -avz -e ssh /opt/test.txt ecs-user@1xx.xxx.xxx.121:/home/ecs-user
  • 将本地/opt/test目录,与公网IP1xx.xxx.xxx.121实例的/home/ecs-user/test目录同步,可使用以下命令:

    rsync -avz -e ssh /opt/test/ ecs-user@1xx.xxx.xxx.121:/home/ecs-user/test

使用Rsync时指定端口

如果需要指定SSH服务的端口,可以通过修改-e参数来指定端口,命令如下:

rsync -avz -e "ssh -p <SSH服务的端口>" <本地文件夹路径> <云服务器实例登录名>@<云服务器实例公网IP地址>:<实例目录>

使用Rsync时指定私钥文件(密钥对认证)

如果您为实例绑定了密钥对,您可以通过密钥对认证身份,可以通过修改-e参数来指定私钥文件路径,命令如下:

rsync -avz -e "ssh -i <私钥文件路径>" <本地文件夹路径> <云服务器实例登录名>@<云服务器实例公网IP地址>:<实例目录>

相关文档

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

  • 本文操作仅支持从本地LinuxmacOS系统上传文件到Linux实例,或从Linux实例下载文件到本地LinuxmacOS,如果您需要上传文件到Windows实例,可使用其他文件传输方式,请参见选择传输文件的方式

  • 如果需要从本机Windows系统向Linux实例传输文件,可以使用WinSCP工具完成文件传输操作,WinSCP支持切换SCPSFTP协议,具体操作,请参见在本地Windows使用WinSCPLinux实例传输文件

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