You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Shell脚本FTP上传文件时遇curl(28)超时错误求助

解决curl FTP上传超时(421明文会话拒绝)问题

从你添加-v参数后的curl日志里,关键错误信息已经非常明确:

< 421 Sorry, cleartext sessions are not accepted on this server.

你的FTP服务器强制要求使用加密的FTPS(FTP over TLS)连接,而当前的curl命令用的是普通明文FTP协议,服务器直接拒绝了未加密的连接请求,这才导致curl触发了超时错误(本质是服务器主动断开连接,curl误判为超时)。

解决方案:修改curl命令启用FTPS加密

你需要给curl添加FTPS相关参数,让它使用加密会话连接服务器。推荐使用--ftp-ssl-reqd参数,这个参数会强制curl使用TLS加密建立连接,如果无法创建加密连接就直接终止请求,正好匹配你服务器的安全要求。

修改后的curl命令如下:

curl --ftp-create-dirs --ftp-ssl-reqd -T $f -u $FTP_USER:$FTP_PASS ftp://$FTP_ADDRESS/var/www/test/$f

额外说明

  • 如果你的服务器使用的是隐式FTPS(默认端口990),需要把URL里的端口改成990,比如ftp://$FTP_ADDRESS:990/var/www/test/$f;不过从日志看你连接的是21端口,属于显式FTPS,用上面的命令即可。
  • 如果遇到证书验证失败的问题(比如Travis环境不信任服务器证书),可以临时添加--insecure参数跳过验证(仅用于测试场景,生产环境不推荐):
    curl --ftp-create-dirs --ftp-ssl-reqd --insecure -T $f -u $FTP_USER:$FTP_PASS ftp://$FTP_ADDRESS/var/www/test/$f
    
  • 最后再确认下变量名:你提到配置的是FTP_PASSWORD,但脚本里使用的是FTP_PASS,不过从日志看已经成功发送USER命令,说明变量映射是正确的,这个可以忽略,但如果后续出现认证问题可以优先排查这里。

修改后重新运行脚本,应该就能正常完成文件上传了。

内容的提问来源于stack exchange,提问作者Harry Cameron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:36:30