我有一个脚本应该连接到FTP
from ftplib import FTP
with FTP('IP') as ftp:
ftp.login(user='my user', passwd='my password')
ftp.cwd('/MY_DIR')
ftp.dir()我有一个错误:ConnectionRefusedError: [Errno 111] Connection refused
ftp是一个带有vsftpd的EC2。
pasv_enable=YES
pasv_min_port=1024
pasv_max_port=1048
pasv_address=IP
pasv_addr_resolve=YES已试过:
该代码工作在其他FTP与不含TLS (托管在1和1,OVH.)
我在NodeJS中尝试了这个脚本
const ftpClient = require('ftp-client');
const client = new ftpClient({
host: "IP",
port: 21,
user: "My user", // defaults to "anonymous"
password: "My password" // defaults to "@anonymous"
});
client.connect(() => {
client.download('/MY_DIR/file','/tmp/file', (res) => {
console.log(res)
})
});工作非常好,所以我排除了防火墙问题。
我试过启用TLS
ssl_enable=YES
require_ssl_reuse=NO然后sudo服务vsftpd重新启动。
并使用
FTP_TLS而不是FTP,但没有起作用
此外,我尝试通过设置禁用被动模式
pasv_enable=NO然后是sudo service vsftpd restart
和ftp.set_pasv(False)
也不起作用
发布于 2018-04-27 16:27:15
解决方案
在使用filezilla调试方法之后,尽管我们在/etc/vsftpd.conf中定义了,但是我们的FTP返回了0.0.0.0
pasv_adress=IP这篇文章帮助了我们:https://www.centos.org/forums/viewtopic.php?t=52408
你得评论一下
listen_ipv6=YES和启用
listen=YES在/etc/vsftpd.conf中
此外,如果无法访问FTP的vsftpd.conf,也可以重写ftplib的类FTP
class CustomFTP(ftplib.FTP):
def makepasv(self):
if self.af == socket.AF_INET:
host, port = ftplib.parse227(self.sendcmd('PASV'))
else:
host, port = ftplib.parse229(self.sendcmd('EPSV'), self.sock.getpeername())
if '0.0.0.0' == host:
""" this ip will be unroutable, we copy Filezilla and return the host instead """
host = self.host
return host, port如果发送'0.0.0.0',则强制上一台主机
https://stackoverflow.com/questions/50060037
复制相似问题