在里面文档目前还不清楚lftp
FTP 和 SFTP 协议是否支持 keepalive。有人知道答案吗?
答案1
对于 FTP,没有保持活动机制,所以不行,如下所解释:https://unix.stackexchange.com/questions/101399/how-to-keep-ftp-connection-alive
但是您可以尝试使用网络选项手动设置超时:
net:idle(时间间隔)
空闲时间过后断开与服务器的连接。>默认为 3 分钟。
和
net:timeout(时间间隔)
设置网络协议超时。
至于 sftp,这取决于您的 SSH 客户端设置,例如,您通常可以在 /etc/ssh_config 中调整 openssh 的超时和保持活动选项(文件位置因发行版而异)。此答案对此进行了最好的解释https://unix.stackexchange.com/a/261905/10525但简而言之你需要:
Host *
ServerAliveInterval XX
ServerAliveCountMax YY
答案2
这个问题的一个非常好的解释来自ProFTPD 项目:
考虑一下 FTP 传输需要很长时间的情况(由于传输的文件非常大,或者连接速度很慢):您有一个 TCP 连接用于控制连接,还有一个单独的 TCP 连接用于数据传输连接。所有字节都通过数据连接传输,因此数据连接肯定不是空闲的 - 但在数据传输过程中,控制连接是空闲的!让我们假设您的 FTP 连接正在通过客户端和服务器之间的某个 NAT 设备。
该 NAT 可能不太智能;它可能不知道您的 FTP 会话的两个不同 TCP 连接是相互关联的;它只能看到一个空闲的 TCP 连接和一个繁忙的 TCP 连接。如果该 FTP 控制连接空闲时间过长,则 NAT 可能会将其关闭(以便为其状态表中的宝贵空间保留可供实际需要传输字节的 TCP 连接使用的空间)。(已知某些 NAT 会关闭仅空闲 5 分钟的 TCP 连接。)FTP 服务器看到 FTP 控制连接已关闭,并中止数据传输。真是一团糟!
如果 FTP 服务器或 FTP 客户端在控制连接上使用 TCP 保持连接,那么该 NAT 可能会看到 TCP 保持连接探测,并且不会关闭空闲控制连接。
这ProFTPD 项目 是一个成熟的 FTP 服务器,支持服务器本身的 TCP 保持连接。
从客户端来看,可以配置客户端以保持与服务器的 TCP 连接,例如 Filezilla。
这里没有绝对的答案,因为 FTP 协议本身不包含这样的机制。
然而,在特定情况下,FTP 协议命令没有实际意义,例如“NOOP”、“LIST”或“CWD”,这些命令可用于保持 FTP 连接处于活动状态。
因此,这取决于客户端本身是否使用这些“无意义”的命令来实现这种机制,以便重置服务器端的超时计时器。当然,您可能还需要调整这些客户端机制以匹配服务器端的最大空闲时间值。
举个例子,众所周知的菲利兹拉正在实施这样一种机制(参见“编辑”->“设置”菜单项,然后参见“连接”->“FTP”选项卡):
答案3
您可以尝试设置ftp:nop 间隔多变的:
ftp:nop 间隔(秒)
下载文件尾部时 NOOP 命令之间的延迟。这对于在刷新数据传输之前发送“传输完成”消息的 ftp 服务器很有用。在这种情况下,NOOP 命令可以防止连接超时。
set ftp:nop-interval 10;