如何在使用SFTP时检查文件是否传输良好?

我在我的服务器上有一个问题:达到文件夹配额时,有人试图上传文件,他没有得到任何错误代码,他存放了一个0字节的文件。 所以我想知道是否有任何解决scheme(例如完整性检查)来检查文件是否传输良好。

不是真的。 最好的办法是通过ssh运行sha1sum远程文件,看看是否匹配本地文件的相同散列。

不同的工具如scprsync可能会在传输失败时返回错误代码。

sFTP协议有buildin错误检查。
客户创build一个零字节的文件,而不是给用户一个错误信息可能是由于3件事情:

  1. 服务器不会正确地将错误返回给客户端。 (我已经看到配额问题发生了……)如果是这种情况,validation文件传输OK的唯一方法是将其读回(由客户端),并与原始文件客户端进行比较。 (我假设你不能更改服务器端。)
  2. 服务器返回错误,但是sFTP客户端程序不能正确处理这个错误。 获取不同的sFTP客户端。 (请注意,在某些客户端,可以禁用error handling,请检查设置。)
  3. 客户端确实处理了错误,但是用户只是简单地忽略了它:教育你的用户。

有特定的SFTP协议扩展来计算文件散列 ,而这样的扩展被大多数客户端和服务器支持(这是很常见的)。 有关此类扩展的完整文档,请参阅此链接: https : //tools.ietf.org/html/draft-ietf-secsh-filexfer-extensions-00#section-3

无论如何,鉴于上述情况,我build议使用支持这种扩展的SFTP客户端,并在客户端和服务器上(在传输之后)计算文件的哈希码,并检查它们是否相同。 这是实现您的目标的最安全的方式。

sftp内置了完整性检查,所以我只能假设用户没有注意到这个错误。

与md5sum比较2个文件的校验和