"sftp client"는 OpenSSH SFTP client를 참조한다고 가정합니다. "문제"는을 누르면 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이 0이됩니다 a->size
.
클라이언트가 실제로 업로드를 중단 한 경우 (예 : 종료시 원격 파일을 완전히 닫지 않고 sftp
) "forced"접두사에서 "close"레코드로 파일 을 알릴 수 있습니다.
강제 종료 "/data/README.md"바이트 읽기 0 쓰기 5366