Kesilen yüklemeleri OpenSSH SFTP sunucusu ile nasıl tespit edebilir veya günlüğe kaydedebilirim?


9

Müşterilerimizin SFTP ing kesilmiş verileri olduğu bir sorun var. Sorunun bizim tarafımızdan mı yoksa onundan mı geldiğinden emin değilim. SFTP günlüğünü etkinleştirdim, ancak bir yükleme kesintiye uğradı mı tespit etmeme izin vermiyor.

Örneğin, sftp istemcisini çalıştırır ve ^Cyüklemenin ortasında vurursam, sunucu sadece close "/data/README.md" bytes read 0 written 5366kesintisiz bir yüklemeden ayırt edilemeyen bir şey söyler .

.partÖnek gibi bir şey işe yarayacağını tahmin ediyorum ama sunucu hatası diğer mesajlara bakarak, OpenSSH's sftp sunucusu ile mümkün olduğunu sanmıyorum.

Bir dosya yüklemesinin kesilip kesilmediğini tespit etmemin bir yolu var mı?

Yanıtlar:


8

"Sftp istemcisi" ile bir OpenSSH SFTP istemcisine başvurduğunuzu varsayıyorum. "Sorun" tuşuna bastığınızda Ctrl+C, yüklemeyi durdurur ve yükleme işlemi tamamen bitmiş gibi uzak dosyayı temiz bir şekilde kapatır (bunun doğru bir davranış olduğunu ve diğer birçok SFTP istemcisinin aynı şekilde davrandığını unutmayın). Bu nedenle sunucunun, yüklemenin kesintiye uğradığını söylemenin kesinlikle bir yolu yoktur.


Açıkça söylemek gerekirse, OpenSSH istemcisi dosyayı oluştururken sunucuya bir boyut ipucu gönderdiğinden. Ancak OpenSSH sunucusu bu bilgileri kullanmaz ve hatta günlüğe kaydetmez. Boyutu kaydetmek için kodunu değiştirmek oldukça basit olsa da, bu sizin için bir seçenekse.

Bkz process_openin 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);

İfadeyi şu şekilde değiştirin logit:

logit("open \"%s\" flags %s mode 0%o size %llu",
    name, string_from_portable(pflags), mode, (unsigned long long)a->size);

Boyut ipucunun gönderilmesinin isteğe bağlı olduğunu unutmayın. Bazı SFTP istemcileri gönderirken (örn. OpenSSH veya WinSCP), bazıları göndermeyecektir (örn. PSFTP, FileZilla veya LFTP). Böyle bir durumda, 0 inç alacaksınız a->size.


İstemci yüklemeyi gerçekten durdurmuş olsaydı (uzak dosyayı temiz bir şekilde kapatmadan, örneğin sftpöldürüldüğünde), "zorunlu" önekten "kapat" kaydına söyleyebilirsin:

zorla kapat "/data/README.md" bayt okunmuş 0 yazılı 5366


1
Vay be, winSCP yaptın mı ?? Büyük inekler dostum. Cevabınız için teşekkürler, bunu yapacağım.
surjikal
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.