本文介绍了 Azure Blob 存储 中 SFTP 的限制和已知问题,以便你排查文件传输问题,并验证客户端与工作流的兼容性。
重要
由于您必须启用分层命名空间才能使用 SFTP,Azure Data Lake Storage 已知问题中的问题也适用于您的账户。
不支持的客户端
已知以下客户端与 Azure Blob 存储的 SFTP 不兼容。 有关详细信息,请参阅支持的算法。
- 坎普
- 帕拉米科 1.16.0
- SSH.NET 2016.1.0 或更高版本
- Renci SSH.NET 2014.6.0
此列表并不详尽,可能会随着时间的推移而变化。
客户端设置
若要通过 SFTP 客户端向/从 Azure Blob 存储传输文件,请参阅以下建议的设置。
WinSCP
- 在偏好设置对话框中,选择传输>耐久性,然后将启用传输恢复/传输到临时文件名设置为禁用。
注意
启用此选项可能会在上传大文件期间导致失败或性能下降。
不受支持的操作
| 类别 | 不受支持的操作 |
|---|---|
| 随机写入 | 包含 READ 和 WRITE 标志的操作。 例如:SSH.NET 创建 API |
| 链接 | symlink - 创建符号链接ln - 创建硬链接 |
| 容量信息 |
df - 文件系统的使用信息 |
| 扩展 | 不支持的扩展包括但不限于:fsync@openssh.com、limits@openssh.com、lsetstat@openssh.com、statvfs@openssh.com |
| SSH 命令 | SFTP 是唯一受支持的子系统。 密钥交换后“Shell”请求失败。 |
| 多协议写入 | 不允许在使用 SFTP 创建的 blob 上从其他协议(NFS、Blob REST、Data Lake Storage REST)进行随机写入和追加(PutBlock、PutBlockList、GetBlockList、AppendBlock、AppendFile)。 允许完全覆盖。 |
| 重命名操作 | 在目标文件名已存在的情况下的重命名操作将违反协议。 尝试此类操作会返回错误。 有关详细信息,请参阅删除和重命名文件。 |
| 跨容器操作 | 不支持通过同一连接在容器之间进行遍历或对多个容器执行操作。 |
| 未删除 | 你不能用SFTP恢复软删除的blob。 使用 Undelete REST API。 |
访问控制列表和默认控制列表(ACL)
SFTP 目前不支持默认 ACL 或其他访问 ACL(POSIX
user::group::以外的 ACL 条目,以及other::命名用户或命名组等条目)。如果访问路径中的任何目录(包括用户的主目录)设置了默认 ACL 或额外的访问 ACL,即使发起连接的用户拥有所需的权限,SFTP 操作也会因
Permission denied而失败。
解决 方案:从 SFTP 访问路径(包括用户的主目录)中删除默认 ACL 和其他访问 ACL,以便仅保留 POSIX user::group::和other::条目。
有关 ACL 以及如何编辑 ACL 的更多详细信息,请参阅访问控制列表(ACL)。
网络
要通过SFTP访问存储账户,你的网络必须允许22端口的流量。
存储账户不支持静态IP地址。 这个限制并不只限于SFTP。
空闲或非激活连接在两分钟后超时。 OpenSSH 停止响应,然后断开连接。 某些客户端会自动重新连接。
SFTP的额外限制
有关性能问题和注意事项,请参阅 Azure Blob 存储中的 SSH 文件传输协议 (SFTP) 性能注意事项。
默认情况下,使用 SFTP 上传的 blob 的 Content-MD5 属性为空。 要用MD5哈希填充该属性,客户端必须计算哈希值并在上传blob前设置Content-MD5属性。
通过SFTP端点的最大文件上传大小为500 GB。
标准常规用途 v2 帐户支持由客户管理的计划故障转移。 有关详细信息,请参阅 Azure 存储灾难恢复计划和故障转移。
要更改存储账户的冗余或复制设置,必须禁用SFTP。 转换完成后你可以重新启用SFTP。
你无法通过 SFTP 终结点访问特殊容器,例如
$logs、$root、$blobchangefeed和$web。不支持 FTPS 和 FTP。
SFTP不使用TLS或SSL。
仅支持 SSH 版本 2。
避免以点 (.)、正斜杠 (/)、反斜杠 () 或二者的序列或组合结尾的 Blob 或目录名称。 路径段不应以点 (.) 结尾。 有关详细信息,请参阅命名和引用容器、Blob 和元数据。
Blob 存储功能
启用SFTP支持后,部分Blob 存储功能将得到全面支持,但有些功能可能仅支持预览版,甚至尚未支持。
要查看启用了 SFTP 支持的帐户如何支持每个 Blob 存储功能,请参阅 Azure 存储帐户支持的 Blob 存储功能。
疑难解答
要解决错误
Failed to update SFTP settings for account 'accountname'. Error: The value 'True' isn't allowed for property isSftpEnabled.,请确认存储账户满足以下前提条件:该账户是一个通用的v2或高级块块账户。
该账户已启用分层命名空间。
若要解决
Home Directory not accessible错误,请检查:用户对容器拥有适当的权限。
连接字符串 指定了没有主目录的本地用户的容器名称。
连接字符串 指定了本地用户的容器名称,而这些用户的主目录不存在。
若要在连接时解析
Received disconnect from XX.XXX.XX.XXX port 22:11:,请检查以下内容:公用网络访问权限为
Enabled from all networks还是Enabled from selected virtual networks and IP addresses。防火墙允许客户端 IP 地址。