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

本文介绍如何使用 SFTP 客户端安全连接到 Azure 存储帐户的 Blob 存储终结点。 连接后,可以上传和下载文件,以及修改文件和文件夹的访问控制列表 (ACL)。

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

先决条件

连接 SFTP 客户端

可以使用任何 SFTP 客户端安全进行连接,然后传输文件。 以下示例演示了一个使用 Open SSH 的 Windows PowerShell 会话。

PS C:\Users\temp> sftp contoso4.contosouser@contoso4.blob.core.chinacloudapi.cn

SFTP 用户名为 storage_account_name.username。 在上面的示例中,storage_account_name 是“contoso4”,username 是“contosouser”。组合的用户名变为“contoso4.contosouser”。 blob 服务终结点为“contoso4.blob.core.chinacloudapi.cn”。

若要完成连接,可能必须响应一个或多个提示。 例如,如果为本地用户配置了密码身份验证,则系统会提示你输入该密码。 系统还可能会提示你信任主机密钥。 有效主机密钥在此处发布。

使用自定义域进行连接

如果你要使用自定义域连接到 Blob 服务终结点,则连接字符串为 myaccount.myuser@customdomain.com。 如果未为用户指定主目录,则连接字符串为 myaccount.mycontainer.myuser@customdomain.com

重要

确保 DNS 提供商不会代理请求,因为这可能会导致连接尝试超时。

若要了解如何将自定义域映射到 Blob 服务终结点,请参阅将自定义域映射到 Azure Blob 存储终结点

使用专用终结点进行连接

如果你要使用专用终结点连接到 Blob 服务终结点,则连接字符串为 myaccount.myuser@myaccount.privatelink.blob.core.chinacloudapi.cn。 如果未为用户指定主目录,则连接字符串为 myaccount.mycontainer.myuser@myaccount.privatelink.blob.core.chinacloudapi.cn

注意

确保将网络配置更改为“从选定的虚拟网络和 IP 地址启用”,然后选择你的专用终结点。 否则,Blob 服务终结点仍可公开访问。

传输数据

连接后,可以上传和下载文件。 以下示例使用活动的 Open SSH 会话上传名为 logfile.txt 的文件。

sftp> put logfile.txt
Uploading logfile.txt to /mydirectory/logfile.txt
logfile.txt
        100%    19    0.2kb/S    00.00

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

存储帐户中显示上传的文件的屏幕截图。

注意

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

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

修改文件或目录的 ACL

可以使用 SFTP 客户端修改 ACL 的拥有用户、拥有组以及所有其他用户的权限级别。 还可以更改拥有用户和拥有组的 ID。 若要详细了解 SFTP 客户端的 ACL 支持,请参阅 ACL

修改权限

若要更改 ACL 的拥有用户、拥有组或所有其他用户的权限级别,本地用户必须具有 Modify Permission 权限。 请参阅授予对容器的权限

以下示例将目录的 ACL 输出到控制台。 然后,它使用 chmod 命令将 ACL 设置为 777。 每个 7 都是数字格式的 rwx(读取、写入和执行)。 因此,777 向拥有用户、拥有组和所有其他用户授予读取、写入和执行权限。 然后,此示例将更新的 ACL 输出到控制台。 若要详细了解 ACL 的数字和短格式,请参阅权限的短格式

sftp> ls -l
drwxr-x---     1234     5678                0 Mon, 08 Jan 2024 16:53:25 GMT dir1
drwxr-x---        0        0                0 Mon, 16 Oct 2023 12:18:08 GMT dir2
sftp> chmod 777 dir1
Changing mode on /dir1
sftp> ls -l
drwxrwxrwx     1234     5678                0 Mon, 08 Jan 2024 16:54:06 GMT dir1
drwxr-x---        0        0                0 Mon, 16 Oct 2023 12:18:08 GMT dir2

注意

目前不支持为命名用户、命名组和命名安全主体添加或修改 ACL 条目。

更改拥有用户

若要更改目录或 Blob 的拥有用户,本地用户必须具有 Modify Ownership 权限。 请参阅授予对容器的权限

以下示例将目录的 ACL 输出到控制台。 拥有用户的 ID 是 0。 此示例使用 chown 命令将拥有用户的 ID 设置为 1234,并将更改输出到控制台。

sftp> ls -l
drwxr-x---        0        0                0 Mon, 08 Jan 2024 16:00:12 GMT dir1
drwxr-x---        0        0                0 Mon, 16 Oct 2023 12:18:08 GMT dir2
sftp> chown 1234 dir1
Changing owner on /dir1
sftp> ls -l
drwxr-x---     1234        0                0 Mon, 08 Jan 2024 16:52:52 GMT dir1
drwxr-x---        0        0                0 Mon, 16 Oct 2023 12:18:08 GMT dir2
sftp>

更改拥有组

若要更改目录或 Blob 的拥有组,本地用户必须具有 Modify Ownership 权限。 请参阅授予对容器的权限

以下示例将目录的 ACL 输出到控制台。 拥有组的 ID 是 0。 此示例使用 chgrp 命令将拥有组的 ID 设置为 5678,并将更改输出到控制台。

sftp> ls -l
drwxr-x---     1234        0                0 Mon, 08 Jan 2024 16:52:52 GMT dir1
drwxr-x---        0        0                0 Mon, 16 Oct 2023 12:18:08 GMT dir2
sftp> chgrp 5678 dir1
Changing group on /dir1
sftp> ls -l
drwxr-x---     1234     5678                0 Mon, 08 Jan 2024 16:53:25 GMT dir1
drwxr-x---        0        0                0 Mon, 16 Oct 2023 12:18:08 GMT dir2