所以我现在遇到了一个有趣的问题。我正尝试使用 curl(CentOS 上的 7.15.5)从远程 FTP 服务器检索文件。我们的客户上周末做了一些更改,因为它在星期五可以正常工作,但现在不行了。
我可以使用 CLI 客户端通过 FTP 连接,并能很好地获取目录列表,尽管我必须发出“passive”才能关闭被动模式。如果我不这样做,我会得到
421 Service not available, remote server has closed connection
Passive mode refused. Turning off passive mode.
No control connection for command: Transport endpoint is not connected
ftp>
好吧。显然,需要禁用被动模式。我读过几次手册页,我知道我需要使用 -P 来指定“主动”模式,但是从文档来看,这似乎会在客户端(我的)机器上打开一个端口,以便数据传输到该端口。由于它位于防火墙后面,所以这行不通。
这告诉我我误解了一些事情,因为 CLI 客户端以主动模式工作。
帮助我 serverfault-kenobi,你是我唯一的希望。
答案1
这关联很好地解释了主动与被动。
答案2
我得到了它!
钥匙是使用-P
,但您必须使用“明显的”选择,因为您无法打开另一个端口并让其连接。
引用文档:
- 让 curl 选择已用于控制连接的相同 IP 地址
因此 curl 命令
curl -u username:password -P - -o output.file ftp://whatever/source.file
这-P -
是最重要的部分。本质上,它使 curl 使用唯一可用的连接(命令连接)来传输数据。
欢呼!
答案3
对我来说 - 为了使其发挥作用 - 我还必须添加--disable-eprt
:
curl --disable-eprt -u username:password -P - ftp://whatever/source.file