我有这个问题,我们的客户一直在 SFTP-ing 截断数据。我不确定问题出在我们这边还是他那边。我启用了 SFTP 日志记录,但它不允许我检测上传是否被中断。
例如,如果我启动 sftp 客户端,然后^C
在上传过程中点击,服务器只会说类似 的close "/data/README.md" bytes read 0 written 5366
内容,这与不间断上传无法区分。
我.part
想像前缀这样的东西会起作用,但是通过查看有关服务器故障的其他帖子,我认为 OpenSSH 的 sftp 服务器不可能。
那么,有没有办法让我检测文件上传是否被中断?
我假设“sftp 客户端”指的是 OpenSSH SFTP 客户端。“问题”是当您按下 时Ctrl+C,它会停止上传并干净地关闭远程文件,就像上传完全完成一样(注意这是正确的行为,许多其他 SFTP 客户端的行为相同)。所以服务器绝对没有办法告诉上传被中断了。
严格来说它有,因为 OpenSSH 客户端在创建文件时会向服务器发送大小提示。但是 OpenSSH 服务器不使用也不记录这些信息。尽管修改其代码以记录大小会非常简单,但如果您愿意的话。
见:
process_open
_sftp-server.c
logit
将语句更改为:请注意,发送尺寸提示是可选的。虽然有些 SFTP 客户端会发送它(例如 OpenSSH 或 WinSCP),但有些不会(例如 PSFTP、FileZilla 或 LFTP)。在这种情况下,您将在
a->size
.如果客户端真的中止了上传(没有完全关闭远程文件,例如何时
sftp
被杀死),您将能够将其从“强制”前缀告诉“关闭”记录: