使用客户端通过服务器端点传输文件 - Amazon Transfer Family
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用客户端通过服务器端点传输文件

通过在客户端中指定传输操作,可以通过Amazon Transfer Family服务传输文件。Amazon Transfer Family支持以下客户端:

  • 我们支持 SFTP 协议的第 3 版。

  • OpenSSH (macOS 和 Linux)

    注意

    此客户端仅适用于启用了 Secure Shell (SSH) 文件传输协议 (SFTP) 的服务器。

  • WinSCP(仅 Microsoft Windows)

  • Cyberduck(Windows、macOS 和 Linux)

  • FileZilla (Windows、macOS 和 Linux)

以下限制适用于每个客户端:

  • 每个连接的并发、多路复用、SFTP 会话的最大数量为 10。

  • Amazon S3 和 Amazon EFS(由于 NFSv4 协议)要求文件名采用 UTF-8 编码。使用不同的编码可能会导致意想不到的结果。对于 Amazon S3,请参阅对象密钥命名指南

  • 对于 安全文件传输协议 (FTPS),仅支持显式模式。不支持隐式模式。

  • 对于文件传输协议 (FTP) 和 FTPS,仅支持被动模式。

  • 对于 FTP 和 FTPS,仅支持流模式。

  • 对于 FTP 和 FTPS,仅支持图像/二进制模式。

  • 对于 FTP 和 FTPS,数据连接的 TLS - PROT C(未受保护)TLS 是默认值,但是Amazon Transfer Family FTPS 协议不支持 PROT C。因此,对于 FTPS,您需要发出 PROT P,您的数据操作才能被接受。

  • 如果您使用 Amazon S3 作为服务器存储,并且您的客户端包含使用多个连接进行单次传输的选项,请务必禁用该选项。否则,上传大文件可能会突然失败。请注意,如果您使用 Amazon EFS 作为存储后端,EFS 确实支持多个连接进行单次传输。

以下是 FTP 和 FTPS 的可用命令列表:

可用命令

ABOR

FEAT

MLST

PASS

RETR

STOR

AUTH

LANG

MKD

PASV

RMD

STOU

CDUP

LIST

MODE

PBSZ

RNFR

STRU

CWD

MDTM

NLST

PROT

RNTO

SYST

DELE

MFMT

NOOP

PWD

SIZE

TYPE

EPSV

MLSD

OPTS

QUIT

STAT

USER

注意

不支持 APPE。

对于 SFTP,目前不支持在使用 Amazon Elastic File System (Amazon EFS) 的服务器上使用逻辑主目录的用户执行以下操作。

SFTP 命令不受支持

SSH_FXP_READLINK

SSH_FXP_SYMLINK

SSH_FXP_STAT(当请求的文件是符号链接时)

SSH_FXP_REALPATH(当请求的路径包含任何符号链接组件时)

生成公有-私有密钥对

在传输文件之前,必须有可用的公有-私有密钥对。如果您之前没有生成过密钥对,请参阅为服务托管用户生成 SSH 密钥

可用的 SFTP/FTPS/FTP 命令

下表描述了Amazon Transfer Family、SFTP 、FTPS 和 FTP 协议的可用命令。

注意

该表提到了仅支持存储桶和对象的 Amazon S3 的文件目录:无层次结构。但是,您可以在对象键名称中使用前缀来暗示层次结构,并以类似于文件夹的方式组织数据。Amazon Simple Storage Service 用户指南中的使用对象元数据中描述了该行为。

SFTP/FTPS/FTP 命令
命令 Amazon S3 Amazon EFS
cd 支持 支持
chgrp 不支持 支持(root或仅支持owner
chmod 不支持 支持(root仅限)
chmtime 不支持 支持
chown 不支持 支持(root仅限)
get 支持 支持(包括解析符号链接)
ln -s 不支持 支持
ls/dir 支持 支持
mkdir 支持 支持
put 支持 支持
pwd 支持 支持
rename

仅支持文件

支持
注意

不支持会覆盖现有文件或目录的重命名。

rm 支持 支持
rmdir 支持(仅限空目录) 支持
version 支持 支持

查找您的 Amazon VPC 端点

如果您的 Transfer Family 服务器的端点类型是 VPC,则识别用于传输文件的端点并不简单。在这种情况下,使用以下过程查找您的 Amazon VPC 端点。

查找您的 Amazon VPC 端点
  1. 导航到您的服务器详细信息页面。

  2. 端点详细信息窗格中,选择 VPC

    
                        Transfer Family 控制台服务器详细信息页面,显示了 VPC 服务器的端点详细信息。
  3. 在 Amazon VPC 控制面板中,选择 VPC 端点 ID

  4. DNS 名称列表中,您的服务器端点是第一个列出的端点。

    
                        Amazon VPC 控制台端点页面,显示了所选端点的 DNS 名称。

避免setstat错误

一些 SFTP 文件传输客户端可以在上传文件时尝试使用命令(例如 SETSTAT)更改远程文件的属性,包括时间戳和权限。但是,这些命令与 Amazon S3 等对象存储系统不兼容。由于这种不兼容性,即使文件以其他方式成功上传,从这些客户端上传文件也可能导致错误。

  • 当您调用CreateServerUpdateServerAPI 时,使用该ProtocolDetails选项SetStatOption可以忽略当客户端尝试对要上传到 S3 存储桶的文件使用 SETSTAT 时生成的错误。

  • 将该值设置为 ENABLE_NO_OP 以使 Transfer Family 服务器忽略 SETSTAT 命令,并上传文件而无需对您的 SFTP 客户端进行任何更改。

  • 请注意,虽然该SetStatOptionENABLE_NO_OP设置忽略了错误,但它确实会在日志中 CloudWatch 生成一个日志条目,因此您可以确定客户端何时进行 SETSTAT 调用。

有关此选项的 API 详细信息,请参阅ProtocolDetails

使用 OpenSSH

按照下文中的说明,使用 OpenSSH 从命令行传输文件。

注意

此客户端仅适用于启用 SFTP 的服务器。

要通过 Amazon Transfer Family 传输文件,请使用 OpenSSH 命令行实用工具
  1. 在 Linux、macOS 或 Windows 上,打开命令终端。

  2. 在提示符中,输入以下命令:

    sftp -i transfer-key sftp_user@service_endpoint

    在前面的命令中,sftp_user 是用户名,transfer-key 是 SSH 私有密钥。此处的 service_endpoint 是服务器的端点,如 Amazon Transfer Family 控制台中为选定的服务器所示。

    注意

    此命令使用默认ssh_config文件中的设置。除非您之前编辑过此文件,否则 SFTP 使用端口 22。您可以通过在命令中添加-P标志来指定其他端口(例如 2222),如下所示。

    sftp -P 2222 -i transfer-key sftp_user@service_endpoint

    或者,如果您一直想使用端口 2222,则可以更新ssh_config文件中的默认端口。

    此时应显示 sftp 提示符。

  3. (可选)要查看用户的主目录,请在sftp提示符下输入以下命令:

    pwd

  4. 要将文件从您的文件系统上传到 Transfer Family 服务器,请使用put命令。例如,要上传hello.txt(假设该文件位于文件系统的当前目录中),请在sftp提示符下运行以下命令:

    put hello.txt

    此时将显示类似于下文的消息,指示文件传输正在进行或者已完成。

    Uploading hello.txt to /my-bucket/home/sftp_user/hello.txt

    hello.txt 100% 127 0.1KB/s 00:00

注意

在您的服务器创建之后,环境中的 DNS 服务可能需要几分钟时间才能解析服务器端点主机名。

使用 WinSCP

按照下文中的说明,使用 WinSCP 从命令行传输文件。

注意

如果您使用的是 WinSCP 5.19,则可以使用您的Amazon证书直接连接到 Amazon S3 并上传/下载文件。有关更多详细信息,请参阅连接到 Amazon S3 服务

使用 WinSCP 通过 Amazon Transfer Family 传输文件
  1. 打开 WinSCP 客户端。

  2. 登录对话框中,为文件协议选择一个协议:SFTPFTP

    如果您选择了 加密,请选择下列选项之一:

    • FTP 没有加密

    • 适用于 FTPS 的 TLS/SSL 显式加密

  3. 对于 Host name (主机名),输入您的服务器终端节点。服务器端点位于服务器详细信息页面。有关更多信息,请参阅 查看 SFTP、FTPS 和 FTP 服务器的详细信息

    注意

    如果您的服务器使用 VPC 端点,请参阅查找您的 Amazon VPC 端点

  4. 端口号中,输入以下内容:

    • 22适用于 SFTP

    • 21适用于 FTP/FTPS

  5. 用户名中,输入您为特定身份提供商创建的用户名称。

    注意

    用户名应是您为身份提供商创建或配置的用户之一。Amazon Transfer Family提供以下身份提供商:

  6. 选择高级打开高级站点设置对话框。在 SSH 部分中,选择身份验证

  7. 对于私有密钥文件,从文件系统中浏览并选择 SSH 私有密钥文件。

    注意

    如果 WinSCP 提供将 SSH 私有密钥转换为 PPK 格式,请选择确定

  8. 选择 OK (确定) 以返回到 Login (登录) 对话框,然后选择 Save (保存)

  9. 将会话保存为站点对话框中,选择确定以完成您的连接设置。

  10. 登录对话框中,选择工具,然后选择首选项

  11. 首选项对话框中的传输中,选择耐力

    对于启用传输恢复/传输到临时文件名选项,选择禁用

    注意

    如果您启用此选项,则会增加上传成本,从而显著降低上传性能。它还可能导致大文件上传失败。

  12. 对于传输,选择背景,然后清除使用多个连接进行单次传输复选框。

    注意

    如果选择此选项,则上传大文件可能会以突然失败。例如,可以创建会产生 Amazon S3 费用的孤立分段上传。还可能发生静默数据损坏。

  13. 执行文件传输。

    您可以使用 drag-and-drop 方法在目标窗口和源窗口之间复制文件。在 WinSCP 中,您可以使用工具栏图标来上传、下载、删除、编辑或修改文件的属性。

注意

如果您使用 Amazon EFS 进行存储,则本说明不适用。

尝试更改远程文件属性(包括时间戳)的命令与 Amazon S3 等对象存储系统不兼容。因此,如果您使用 Amazon S3 进行存储,请务必在执行文件传输之前禁用 WinSCP 时间戳设置(或按SetStatOption中所述使用避免setstat错误)。为此,请在 WinSCP 传输设置对话框中,禁用设置权限上传选项和保留时间戳常用选项。

使用 Cyberduck

按照下文中的说明,使用 Cyberduck 从命令行传输文件。

使用 Cyberduck 通过 Amazon Transfer Family 传输文件
  1. 打开 Cyberduck 客户端。

  2. 选择打开连接

  3. 打开连接对话框中,选择协议:SFTP(SSH 文件传输协议)FTP-SSL(显式身份验证 TLS)FTP(文件传输协议)

  4. 对于服务器,输入您的服务器端点。服务器端点位于服务器详细信息页面。有关更多信息,请参阅 查看 SFTP、FTPS 和 FTP 服务器的详细信息

    注意

    如果您的服务器使用 VPC 端点,请参阅查找您的 Amazon VPC 端点

  5. 端口号中,输入以下内容:

    • 22适用于 SFTP

    • 21适用于 FTP/FTPS

  6. 对于 Username (用户名),输入您在管理服务器端点的用户中创建的用户的名称。

  7. 如果选择了 SFTP,则在 SSH 私有密钥中,选择或输入 SSH 私有密钥。

  8. 选择连接

  9. 执行文件传输。

    根据您的文件所在的位置,执行以下操作之一:

    • 在您的本地目录(源)中,选择您要传输的文件,然后将这些文件拖放到 Amazon S3 目录(目标)中。

    • 在 Amazon S3 目录(源)中,选择您要传输的文件,然后将这些文件拖放到您的本地目录(目标)中。

使用 FileZilla

按照以下说明使用传输文件 FileZilla。

要设置 FileZilla 文件传输
  1. 打开 FileZilla 客户端。

  2. 选择文件,然后选择站点管理器

  3. 站点管理器对话框中,选择新建站点

  4. 常规选项卡的协议中选择一个协议:SFTPFTP

    如果您选择了 加密,请选择下列选项之一:

    • 仅使用纯 FTP(不安全)— 用于 FTP

    • 使用 TLS 上的显式 FTP(如果可用)— 用于 FTPS

  5. 主机名中,输入您正在使用的协议,然后输入您的服务器端点。服务器端点位于服务器详细信息页面。有关更多信息,请参阅 查看 SFTP、FTPS 和 FTP 服务器的详细信息

    注意

    如果您的服务器使用 VPC 端点,请参阅查找您的 Amazon VPC 端点

    • 如果您使用的是 SFTP,请输入:sftp://hostname

    • 如果您使用的是 FTPS,请输入:ftps://hostname

    请务必将主机名替换为实际的服务器端点。

  6. 端口号中,输入以下内容:

    • 22适用于 SFTP

    • 21适用于 FTP/FTPS

  7. 如果选择了 SFTP,则选择密钥文件作为登录类型

    对于密钥文件,选择或输入 SSH 私有密钥。

  8. 对于用户名,输入您在管理服务器端点的用户中创建的用户的名称。

  9. 选择连接

  10. 执行文件传输。

    注意

    如果您中断正在进行的文件传输,Amazon Transfer Family 可能会将部分对象写入您的 Amazon S3 存储桶。如果您中断上传,在继续之前,请检查 Amazon S3 存储桶中文件大小是否与源对象的文件大小相符。

使用 Perl 客户端

如果您使用 NET::SFTP::Foreign perl 客户端,则必须将设置queue_size为。1例如:

my $sftp = Net::SFTP::Foreign->new('user@s-12345.server.transfer.us-east-2.amazonaws.com', queue_size => 1);

注意

1.92.02 之前的Net::SFTP::Foreign修订版本需要使用此解决方法。

上传后处理

你可以查看上传后的处理信息,包括 Amazon S3 对象元数据和事件通知。

Amazon S3 对象元数据

作为对象元数据的一部分,您会看到一个名为x-amz-meta-user-agent的密钥,其值为AWSTransferx-amz-meta-user-agent-id的值为username@server-idusername是上传文件的 Transfer Family 用户,server-id也是用于上传的服务器。可以使用对 Lambda 函数中的 S3 对象进行HeadObject操作来访问这些信息。

Amazon S3 事件通知

当使用 Transfer Family 将对象上传到您的 S3 存储桶时,RoleSessionName作为[AWS:Role Unique Identifier]/username.sessionid@server-id包含在 S3 事件通知结构的请求者字段中。例如,以下是来自 S3 访问权限日志的、用于复制到 S3 存储桶中的请求者字段示例内容。

arn:aws:sts::AWS-Account-ID:assumed-role/IamRoleName/username.sessionid@server-id

在上述中请求者字段中,它显示了名为IamRoleName的 IAM 角色。有关配置 S3 事件通知的更多信息,请参阅Amazon Simple Storage Service 开发人员指南中的配置 Amazon S3 事件通知。有关 Amazon Identity and Access Management(IAM) 角色唯一标识符的更多信息,请参阅Amazon Identity and Access Management用户指南中的唯一标识符