Ich gehe davon aus, dass Sie mit "sftp client" auf einen OpenSSH SFTP-Client verweisen. Das "Problem" besteht darin, dass beim Drücken Ctrl+Cder Upload gestoppt und die Remote-Datei sauber geschlossen wird, als ob der Upload vollständig abgeschlossen wäre (beachten Sie, dass es sich um ein korrektes Verhalten handelt und sich viele andere SFTP-Clients gleich verhalten). Der Server kann also absolut nicht feststellen, dass der Upload unterbrochen wurde.
Genau genommen hat dies der Fall, da der OpenSSH-Client beim Erstellen der Datei einen Größenhinweis an den Server sendet. Der OpenSSH-Server verwendet diese Informationen jedoch nicht und protokolliert sie nicht einmal. Obwohl es ziemlich einfach wäre, den Code zu ändern, um die Größe zu protokollieren, wenn dies eine Option für Sie ist.
Siehe process_open
in 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);
Ändern Sie die logit
Anweisung in:
logit("open \"%s\" flags %s mode 0%o size %llu",
name, string_from_portable(pflags), mode, (unsigned long long)a->size);
Beachten Sie, dass das Senden des Größenhinweises optional ist. Einige SFTP-Clients senden es (z. B. OpenSSH oder WinSCP), andere nicht (z. B. PSFTP, FileZilla oder LFTP). In einem solchen Fall erhalten Sie 0 in a->size
.
Hätte der Client den Upload wirklich abgebrochen (ohne die Remote-Datei sauber zu schließen, z. B. wenn sie beendet sftp
wird), könnten Sie sie vom "erzwungenen" Präfix zum "Schließen" des Datensatzes unterscheiden:
erzwungenes Schließen "/data/README.md" Bytes gelesen 0 geschrieben 5366