我的服务器出现问题:当文件夹配额已满时,有人尝试上传文件,他没有收到任何错误代码,并且上传了一个 0 字节的文件。所以我想知道是否有任何解决方案(例如完整性检查)来检查文件是否已正确传输。
答案1
不是的。您能做的最好的事情是sha1sum
通过 ssh 对远程文件运行,看看它是否与本地文件的相同哈希值匹配。
scp
或等不同的工具rsync
可能会在传输失败时返回错误代码。
答案2
具体来说SFTP 协议扩展用于计算文件哈希值,并且大多数客户端和服务器都支持此类扩展(非常常见)。有关此类扩展的完整文档,请参阅此链接:https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-extensions-00#section-3
无论如何,鉴于上述情况,我建议使用支持此类扩展的 SFTP 客户端,并在客户端和服务器上计算文件的哈希码(传输后)并检查它们是否相同。这是实现目标的最安全方法。
答案3
sFTP 协议内置了错误检查功能。
客户端会创建一个零字节文件而不是向用户提供错误消息,这可能是由于以下三个原因:
- 服务器没有正确地将错误返回给客户端。(我见过配额问题发生这种情况……)如果是这种情况,那么验证文件是否已成功传输的唯一方法是将其读回(由客户端)并与客户端的原始文件进行比较。(我假设您无法在服务器端进行更改。)
- 服务器返回错误,但 sFTP 客户端程序无法正确处理此错误。获取其他 sFTP 客户端。(请注意,在某些客户端中可以禁用错误处理。检查设置。)
- 客户端确实处理了错误,但用户只是忽略了它:教育您的用户。
答案4
与 md5sum 比较两个文件的校验和