自从新开了ECS之后,连接FTP一直报错:

状态: 正在连接 xx.xx.xx.xx:21…
状态: 连接建立,等待欢迎消息…
状态: 不安全的服务器,不支持 FTP over TLS。
状态: 服务器不支持非 ASCII 字符。
状态: 已登录
状态: 读取目录列表…
状态: 服务器发回了不可路由的地址。使用服务器地址代替。
命令: MLSD
错误: 20 秒后无活动,连接超时
错误: 读取目录列表失败

网络上有很多同样的错误,解决方式主要有两种,一种是客户端改为主动模式,另外一种是本地PC防火墙设置规则放行。很明显这两种都没能解决我的问题,但是给了一些提示:最主要的是要在服务器放行相应端口!

解决步骤:

1,以前用的是阿里云的经典网络,不存在这个问题,现在换成专有网络出现这个问题,那就是要到安全组配置入网规则

2,试着放开了很多常见端口,如20,21等或者指定了FTP端口,问题依旧。。。。。。接着搜索了FTP的基础知识:客户端登陆之后,FTP服务器会反馈数据传送端口给客户端。也就是说我放开的端口并不是服务器指定的端口,所以依然无法获取目录。知道问题出在哪里就好办了,直接搜索FTP服务器端软件(本站用的pure-ftpd)文档,得到如下信息:

3,SSH连接服务器查看pure-ftpd的配置文件得到端口范围,在阿里云的专有网络安全组放开相应端口,问题解决!

4,“服务器发回了不可路由的地址。使用服务器地址代替。”

原因:阿里云的专有网络的网卡只绑定有内网IP,外网IP应该是绑定在路由。FTP客户端使用被动模式连接pureftpd的时候,pureftpd返回了一个内网IP。

解决:强制pureftpd返回外网IP。在配置文件pureftpd.conf中加入ForcePassiveIP x.x.x.x 重启FTP服务。

外网IP需到专有网络路由表查看:

参考文章:http://www.jb51.net/LINUXjishu/401671.html

4 回复

留下一个答复

Please enter your comment!
Please enter your name here