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

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

使用客户端传输文件

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

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

  • OpenSSH(macOS 和 Linux)

    注意

    此客户端仅适用于启用了 SFTP (SFTP) FTP (SFTP) 的服务器。

  • WinSCP(仅 Microsoft Windows)

  • Cyberduck(Windows、macOS 和 Linux)

  • FileZilla (Windows、macOS 和 Linux)

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

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

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

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

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

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

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

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

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

可用命令

劳动

壮举

最多

通过

回复

STOR

身份验证

LANG

MKD

PASV

RMD

STOU

CDUP

LIST

MODE

PBSZ

RNFR

STRU

CWD

MDTM

NLST

端口

RNTO

系统

DELE

MFMT

哎哟

PWD

SIZE

TYPE

EPSV

MLSD

选择

QUIT

统计数据

USER

注意

不支持 APPE。

对于 SFTP,在使用 Amazon 弹性文件系统 (Amazon EFS) 的服务器上使用逻辑主目录的用户目前不支持以下操作。

不支持的 SFTP 命令

SSH_FXP_READLINK

SSH_FXP_SYMLINK

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

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

生成公有-私有key pair

在传输文件之前,必须有可用的公私key pair。如果您之前没有生成key pair,请参阅生成 SSH 密钥

找到您的Amazon VPC 终端

如果您的 Transfer Family 服务器的终端节点类型为 VPC,则识别用于传输文件的终端节点并不简单。在这种情况下,请使用 Amazon VPC 终端节点。

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

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

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

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

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

避免setstat错误

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

  • 当您调用CreateServerUpdateServer API 时,使用 S3 桶的文件使用 STAT 时生成的错误。ProtocolDetailsSetStatOption

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

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

有关此选项的 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控制台中显示的服务器端点。

    此时应显示 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,请为 E ncryption Encryption,选择以下选项之一

    • FTP 不加密

    • TLS/SSL FTPS 的显式加密

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

    注意

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

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

    • 22使用

    • 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 通过 Amazon Transfer Family 传输文件
  1. 打开 Cyberduck 客户端。

  2. 选择 “打开连接”。

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

  4. 对于服务器,输入您的服务器终端节点。服务器端点位于服务器详细信息页面上。有关更多信息,请参阅查看服务器详细信息

    注意

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

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

    • 22使用

    • 21用于 FTP/FTPS

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

  7. 如果选择了 SFTP,对于 SSH 私钥,请选择或输入 SSH 私钥。

  8. 选择 Connect(连接)。

  9. 执行文件传输。

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

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

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

使用 FileZilla

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

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

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

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

  4. 在 “常规” 选项卡上,为 “协议” 选择一个协议:SFTPFTP

    如果选择 FTP,请为 E ncryption Encryption,选择以下选项之一

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

    • 如果可用,在 TLS 上使用明确的 FTP — 用于 FTPS

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

    注意

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

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

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

    确保将主机名替换为您的实际服务器端点。

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

    • 22使用

    • 21用于 FTP/FTPS

  7. 如果选择了 SFTP,则在 “登录类型” 中,选择 “密钥文件”。

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

  8. 对于用户,输入您在中创建的用户的名称管理用户

  9. 选择 Connect(连接)。

  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.02Net::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 将对象上传到您RoleSessionName的 S3 存储桶时,该对象将包含在 S3 事件通知结构的 “请求者” 字段中,名为[AWS:Role Unique Identifier]/username.sessionid@server-id。例如,以下是复制到 S3 存储桶的文件的 S3 访问日志中的示例请求者字段的内容。

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

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