通过使用 SSH 文件传输协议 (SFTP) 来连接到 Azure Blob 存储

可以使用 SFTP 客户端安全连接到 Azure 存储帐户的 Blob 存储终结点,然后上传和下载文件。 本文介绍如何启用 SFTP,然后使用 SFTP 客户端连接到 Blob 存储。

若要详细了解 Azure Blob 存储中的 SFTP 支持,请参阅 Azure Blob 存储中的 SSH 文件传输协议 (SFTP)

先决条件

  • 一个标准常规用途 v2 存储帐户或高级块 Blob 存储帐户。 还可以在创建帐户时启用 SFTP。 有关这些类型的存储帐户的详细信息,请参阅存储帐户概述

  • 必须启用帐户的分层命名空间功能。 若要启用分层命名空间功能,请参阅使用 Azure Data Lake Storage Gen2 功能升级 Azure Blob 存储

  • 如果要从本地网络连接,请确保客户端允许通过 SFTP 使用的端口 22 进行传出通信。

启用 SFTP 支持

本部分演示如何为现有存储帐户启用 SFTP 支持。 若要查看在创建帐户时启用 SFTP 支持的 Azure 资源管理器模板,请参阅在 Azure 上使用 SFTP 协议创建可访问的 Azure 存储帐户和 Blob 容器。 若要查看本地用户 REST API 和 .NET 引用,请参阅本地用户LocalUser 类

  1. Azure 门户中导航到存储帐户。

  2. 在“设置”下,选择“SFTP” 。

    注意

    仅当已启用帐户的分层命名空间功能时,才会显示此选项。 若要启用分层命名空间功能,请参阅使用 Azure Data Lake Storage Gen2 功能升级 Azure Blob 存储

  3. 选择“启用 SFTP”。

    Enable SFTP button

    注意

    如果 SFTP 配置页中未显示任何本地用户,需要添加至少一个本地用户。 若要添加本地用户,请参阅下一部分。

禁用 SFTP 支持

本部分演示如何为现有存储帐户禁用 SFTP 支持。 由于 SFTP 支持会产生每小时成本,因此,当客户端未主动使用 SFTP 传输数据时,请考虑禁用 SFTP 支持。

  1. Azure 门户中导航到存储帐户。

  2. 在“设置”下,选择“SFTP” 。

  3. 选择“禁用 SFTP”。

    Screenshot of the disable SFTP button.

配置权限

Azure 存储不支持使用共享访问签名 (SAS) 或 Microsoft Entra 身份验证来访问 SFTP 终结点。 必须改用称作“本地用户”的标识,可以使用 Azure 生成的密码或安全外壳 (SSH) 密钥对来保护该标识。 若要向连接客户端授予访问权限,存储帐户必须具有与该密码或密钥对关联的标识。 该标识称为本地用户。

本部分介绍如何创建本地用户,选择身份验证方法,以及为该本地用户分配权限。

若要详细了解 SFTP 权限模型,请参阅 SFTP 权限模型

提示

本部分演示如何为现有存储帐户配置本地用户。 若要查看在创建帐户时配置本地用户的 Azure 资源管理器模板,请参阅在 Azure 上使用 SFTP 协议创建可访问的 Azure 存储帐户和 Blob 容器

  1. Azure 门户中导航到存储帐户。

  2. 在“设置”下,依次选择“SFTP”、“添加本地用户” 。

    Add local users button

  3. 在“添加本地用户”配置窗格中添加用户名,然后选择要与此本地用户关联的身份验证方法。 可以关联密码和/或 SSH 密钥。

    重要

    虽然可以启用这两种身份验证形式,但 SFTP 客户端只能使用其中的一种形式进行连接。 不支持多重身份验证 - 这种方法需要有效的密码和有效的公钥/私钥对才能成功完成身份验证。

    如果选择“SSH 密码”,则在完成“添加本地用户”配置窗格中的所有步骤后,密码就会显示。 SSH 密码由 Azure 生成,长度至少为 32 个字符。

    如果选择“SSH 密钥对”,请选择“公钥源”以指定密钥源。

    Local user configuration pane

    下表描述了每个密钥源选项:

    选项 指南
    生成新的密钥对 使用此选项可以创建新的公钥/私钥对。 公钥以你提供的密钥名称存储在 Azure 中。 成功添加本地用户后,可以下载私钥。
    使用 Azure 中存储的现有密钥 若要使用已存储在 Azure 中的公钥,请使用此选项。 当 SFTP 客户端连接到 Azure Blob 存储时,这些客户端需要提供与此公钥关联的私钥。
    使用现有公钥 若要上传存储在 Azure 外部的公钥,请使用此选项。 如果你没有公钥,但想要在 Azure 外部生成一个公钥,请参阅使用 ssh-keygen 生成密钥

    注意

    现有公钥选项目前仅支持 OpenSSH 格式的公钥。 提供的密钥必须遵循以下格式:<key type> <key data>。 例如,RSA 密钥类似于:ssh-rsa AAAAB3N...。 如果密钥采用另一种格式,则可以使用 ssh-keygen 等工具将其转换为 OpenSSH 格式。

  4. 选择“下一步”打开配置窗格的“容器权限”选项卡 。

  5. 在“容器权限”选项卡中,选择要提供给此本地用户使用的容器。 然后,选择要允许此本地用户执行的操作类型。

    Container permissions tab

    重要

    本地用户必须对要连接到的容器拥有至少一个容器权限,否则连接尝试将失败。

  6. 在“主目录”编辑框中,键入容器的名称,或者用作与此本地用户关联的默认位置的目录路径(包括容器名称)。

    若要详细了解主目录,请参阅主目录

  7. 选择“添加”按钮以添加本地用户。

    如果启用了密码身份验证,则在添加本地用户后,Azure 生成的密码将显示在对话框中。

    重要

    以后不再可以检索到此密码,因此请务必复制该密码,并将其存储在可以找到的位置。

    如果选择生成新的密钥对,则在添加本地用户后,系统会提示你下载该密钥对的私钥。

    注意

    本地用户具有仅用于 SMB 身份验证的 sharedKey 属性。

连接 SFTP 客户端

可以使用任何 SFTP 客户端安全进行连接,然后传输文件。 以下屏幕截图显示了一个 Windows PowerShell 会话,该会话使用 Open SSH 和密码身份验证进行连接,然后上传名为 logfile.txt 的文件。

Connect with Open SSH

注意

SFTP 用户名为 storage_account_name.username。 在上面的示例中,storage_account_name 为“contoso4”,username 为“contosouser”。对于 SFTP 命令,合并的用户名变为 contoso4.contosouser

注意

系统可能会提示你信任主机密钥。 有效主机密钥在此处发布。

传输完成后,可以在 Azure 门户中查看和管理该文件。

Uploaded file appears in storage account

注意

Azure 门户使用 Blob REST API 和 Data Lake Storage Gen2 REST API。 能够在 Azure 门户中与上传的文件进行交互体现了 SFTP 和 REST 之间的互操作性。

有关如何进行连接和传输文件的指导,请参阅 SFTP 客户端的文档。

使用自定义域进行连接

使用自定义域时,连接字符串为 myaccount.myuser@customdomain.com。 如果尚未为用户指定主目录,则它是 myaccount.mycontainer.myuser@customdomain.com

重要

确保 DNS 提供程序不代理请求。 代理可能会导致连接尝试超时。

使用专用终结点进行连接

使用专用终结点时,连接字符串为 myaccount.myuser@myaccount.privatelink.blob.core.chinacloudapi.cn。 如果尚未为用户指定主目录,则它是 myaccount.mycontainer.myuser@myaccount.privatelink.blob.core.chinacloudapi.cn

注意

确保将网络配置更改为“从所选虚拟网络和 IP 地址启用”并选择专用终结点,否则仍可公开访问常规 SFTP 终结点。

网络注意事项

SFTP 是平台级服务,因此即使帐户选项已禁用,端口 22 也会打开。 如果未配置 SFTP 访问,则所有请求都将与服务断开连接。 使用 SFTP 时,可能需要通过配置防火墙、虚拟网络或专用终结点来限制公共访问。 这些设置在应用程序层强制执行,这意味着它们不特定于 SFTP,并且会影响与所有 Azure 存储终结点的连接。 有关防火墙和网络配置的详细信息,请参阅配置 Azure 存储防火墙和虚拟网络

注意

尝试在协议层确定 TLS 支持的审核工具可能会返回 TLS 版本,此外,直接针对存储帐户终结点运行时,可能会返回所需的最低版本。 有关详细信息,请参阅针对发送到存储帐户的请求强制实施必需的最低版本的传输层安全性 (TLS)

另请参阅