使用宝塔很长时间,很早就发现宝塔安装的FTP不能使用被动模式。也尝试过解决,之前以为是端口不通,但开放端口后,发现还是不行。由于时间问题,也没再深入去解决,毕竟还可以用主动模式。
最近开始使用起vscode
,然后安装了sftp
同步插件,但发现同步文件非常慢,每次修改完文件都要十多秒才能把文件上传上去,效率太慢了。
于是打开调试模式,排查问题,最后发现这个插件不能指定使用主动模式,只能被动模式失败后才切换到主动模式,所以每次同步文件都要十多秒。
关键日志:
命令: PASV
响应: 227 Entering Passive Mode (172,18,13,228,154,214)
客户端发出PASV
被动模式命令,服务器返回了一个VPC内网IP,客户端尝试连接这个内网IP,但因为不是同一个内网,所以是连接不上的,指导超时才切换成主动模式。
服务器有两个IP,一个VPC内网IP,一个外网IP,pure-ftpd
优先获取到了内网IP告知客户端将其作为被动模式IP,所以导致了被动模式不能使用的问题。
这种情况,我们只需要在配置文件里指定被动模式IP即可解决。编辑pure-ftpd
的配置,搜索ForcePassiveIP
,取消注释这行配置,修改IP为你的服务器外网IP。
这里假设你的服务器IP为8.8.8.8
ForcePassiveIP 8.8.8.8
保存,重启服务器,over
如果还是不行,那么要看看防火墙和安全组有没有放行被动模式的端口,宝塔安装的pure-ftpd
软件的被动模式端口默认是39000
至40000
,所以要先在防火墙和服务器安全组里放通这个端口范围。
服务器安全组是指阿里云或腾讯云的服务器,其它云服务器厂商基本都有