Unterstützt LFTP Keepalive für FTP / SFTP?

804
Gill Bates

In der Dokumentation ist nicht klar, ob die lftpUnterstützung für FTP- und SFTP-Protokolle beibehalten wird. Kennt jemand die Antwort?

3
@PimpJuiceIT, Hi, ich habe das gesehen. Es sagt nur über HTTP, aber nicht über FTP / SFTP aus und ich bin hauptsächlich daran interessiert, etwas über FTP / SFTP zu lernen. Gill Bates vor 5 Jahren 0
Guter Punkt, Kommentar entfernt !! Pimp Juice IT vor 5 Jahren 0

3 Antworten auf die Frage

4
djsmiley2k

Für FTP gibt es keinen Keep-Alive-Mechanismus, also nein, wie hier erklärt: https://unix.stackexchange.com/questions/101399/how-to-keep-ftp-connection-alive

Sie können jedoch versuchen, mithilfe der Nettooptionen Timeouts manuell festzulegen:

Netz: Leerlauf (Zeitintervall)

Trennen Sie nach dieser Leerlaufzeit die Verbindung zum Server. > Standardeinstellung ist 3 Minuten.

Und

net: Timeout (Zeitintervall)

Legt das Netzwerkprotokoll-Timeout fest.

Bei sftp hängt es von der Einrichtung Ihres SSH-Clients ab. Sie können beispielsweise das Zeitlimit anpassen und die Optionen für openssh in / etc / ssh_config normal beibehalten (der Dateispeicherort variiert zwischen den Distributionen). Dies lässt sich am besten in dieser Antwort https://unix.stackexchange.com/a/261905/10525 erklären, aber in Kürze benötigen Sie:

Host * ServerAliveInterval XX ServerAliveCountMax YY 
Anscheinend hast du recht. Gill Bates vor 5 Jahren 0
0
harrymc

Eine sehr gute Erklärung für das Problem liefert das ProFTPD-Projekt :

Berücksichtigen Sie, was bei FTP-Übertragungen geschieht, die sehr lange dauern (entweder aufgrund sehr großer übertragener Dateien oder einer langsamen Verbindung): Sie haben eine TCP-Verbindung für die Steuerverbindung und eine separate TCP-Verbindung für die Datenübertragungsverbindung . Alle Bytes werden über die Datenverbindung übertragen, so dass die Datenverbindung sicherlich nicht inaktiv ist - aber während die Datenübertragung stattfindet, ist die Steuerverbindung inaktiv! Nehmen wir an, dass Ihre FTP-Verbindungen zwischen Client und Server über ein NAT-Gerät laufen.

Dass NAT möglicherweise nicht sehr intelligent ist; Möglicherweise wissen Sie nicht, dass die beiden verschiedenen TCP-Verbindungen Ihrer FTP-Sitzung miteinander zusammenhängen. Es wird nur eine untätige TCP-Verbindung und eine besetzte TCP-Verbindung angezeigt. Wenn diese FTP-Steuerverbindung zu lange im Leerlauf ist, kann sie vom NAT geschlossen werden (um wertvollen Speicherplatz in den Statustabellen für TCP-Verbindungen verfügbar zu halten, die tatsächlich Bytes übertragen müssen). (Es ist bekannt, dass einige NATs TCP-Verbindungen schließen, die nur 5 Minuten inaktiv waren.) Der FTP-Server erkennt, dass die FTP-Steuerverbindung geschlossen ist, und bricht die Datenübertragung ab. Was für ein Chaos!

Wenn der FTP-Server oder der FTP-Client TCP-Keepalives für die Steuerungsverbindung verwendet hatte, hätte dieses NAT möglicherweise die TCP-Keepalive-Tests erkannt und die Leerlauf-Kontrollverbindung nicht geschlossen.

Das ProFTPD-Projekt ist ein vollwertiger FTP-Server, der TCP-Keepalives vom Server selbst unterstützt.

Auf der Clientseite können Clients konfiguriert werden, um die TCP-Verbindung zum Server aufrechtzuerhalten, z. B. Filezilla.

Von Unix Stack Exchange :

Hier gibt es keine absolute Antwort, da das FTP-Protokoll selbst keinen solchen Mechanismus enthält.

Es gibt jedoch FTP-Protokollbefehle ohne wirkliche Bedeutungen in einer bestimmten Situation wie "NOOP", "LIST" oder "CWD", mit denen die FTP-Verbindung am Leben erhalten werden kann.

Es liegt also am Client selbst, einen solchen Mechanismus mit diesen "bedeutungslosen" Befehlen zu implementieren, um die Timeout-Timer auf der Serverseite zurückzusetzen. Natürlich müssen Sie diesen clientseitigen Mechanismus möglicherweise auch anpassen, um den Wert für die maximale Leerlaufzeit auf der Serverseite anzupassen.

Um Ihnen ein Beispiel zu geben, implementiert der bekannte Filezilla einen solchen Mechanismus (siehe Menüeintrag "Bearbeiten" -> "Einstellungen", dann unter "Verbindung" -> Registerkarte "FTP"):

Filezilla-Einstellungen

0
lennelei

Sie können versuchen, die Variable ftp: nop-Intervall festzulegen:

ftp: nop-Intervall (Sekunden)

Verzögerung zwischen NOOP-Befehlen beim Herunterladen des Endes einer Datei. Dies ist nützlich für FTP-Server, die vor der Datenübertragung die Meldung "Übertragung abgeschlossen" senden. In solchen Fällen können NOOP-Befehle das Verbindungszeitlimit verhindern.

set ftp:nop-interval 10;