Answers:
我假设“ sftp客户端”是指OpenSSH SFTP客户端。“问题”是,当您按下时Ctrl+C,它将停止上载并干净地关闭远程文件,就像上载完全完成一样(请注意,这是正确的行为,许多其他SFTP客户端的行为相同)。因此,服务器绝对无法告知上传已中断。
严格来讲,它是有好处的,因为OpenSSH客户端在创建文件时会向服务器发送大小提示。但是OpenSSH服务器不使用也不记录该信息。尽管修改它的代码以记录大小非常简单,但是如果您愿意的话。
见process_open
在sftp-server.c
:
a = get_attrib();
flags = flags_from_portable(pflags);
mode = (a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS) ? a->perm : 0666;
logit("open \"%s\" flags %s mode 0%o",
name, string_from_portable(pflags), mode);
将logit
语句更改为:
logit("open \"%s\" flags %s mode 0%o size %llu",
name, string_from_portable(pflags), mode, (unsigned long long)a->size);
请注意,发送大小提示是可选的。虽然某些SFTP客户端将发送它(例如OpenSSH或WinSCP),但有些则不会(例如PSFTP,FileZilla或LFTP)发送它。在这种情况下,您将获得0 in a->size
。
如果客户端真正中止了上传(而没有干净地关闭远程文件,例如,当文件sftp
被杀死时),则可以将其从“强制”前缀告知“关闭”记录:
强制关闭“ /data/README.md”字节,读0,写5366