J'ai mis en place un serveur FTP sur AWS EC2 (Ubuntu16.04) avec le mode passif (PASV
), mais cela ne fonctionne pas. Cependant, cela fonctionne avec EPSV
, je ne sais pas pourquoi. J'ai cherché autour mais je n'ai trouvé aucune réponse, n'importe quel corps peut m'aider avec ceci?vsftpd renvoie 0,0,0,0 en réponse à PASV
1. vsftpd config
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
pasv_enable=YES
pasv_min_port=13000
pasv_max_port=13100
port_enable=YES
pasv_address=[public ip address of AWS EC2 instance]
allow_writeable_chroot=YES
seccomp_sandbox=NO
2. AWS EC2 Firewall
3. Test de par FireFTP
Avec le mode PASV
, je ne peux pas se connecter au serveur FTP, le journal est:
220 (vsFTPd 3.0.3)
USER sensor
331 Please specify the password.
PASS (password not shown)
230 Login successful.
CWD/
250 Directory successfully changed.
TYPE A
200 Switching to ASCII mode.
PASV
QUIT
Cependant, il fonctionne avec EPSV
(avec case à cocher IPV6 sélectionnée), le journal comme suit:
220 (vsFTPd 3.0.3)
USER sensor
331 Please specify the password.
PASS (password not shown)
230 Login successful.
PWD
257 "/" is the current directory
TYPE A
200 Switching to ASCII mode.
EPSV
229 Entering Extended Passive Mode (|||13082|)
LIST
150 Here comes the directory listing.
226 Directory send OK.
4. Testez par Python ftplib
from ftplib import FTP
contents = []
ftp = FTP(host=xxx, timeout=3000)
ftp.login(user=xxx, passwd=xxx)
ftp.set_debuglevel(2)
ftp.retrlines("NLST", contents.append)
ftp.quit()
Le journal comme suit:
*cmd* 'TYPE A'
*put* 'TYPE A\r\n'
*get* '200 Switching to ASCII mode.\n'
*resp* '200 Switching to ASCII mode.'
*cmd* 'PASV'
*put* 'PASV\r\n'
*get* '227 Entering Passive Mode (0,0,0,0,50,245).\n'
*resp* '227 Entering Passive Mode (0,0,0,0,50,245).'
ConnectionRefusedError: [Errno 111] Connection refused
Renvoie-t-il vraiment '0,0,0,0' dans la réponse' PASV'? –
Merci Martin! Comme indiqué dans le journal de ftplib, il renvoie (0, 0, 0, 0, ..) alors que le mode PASV est appliqué. – codefluxer
Ensuite, je suppose que vous avez spécifié l'adresse IPv6 dans 'pasv_address'. Il doit être l'adresse IPv4 pour que 'PASV' fonctionne. Le 'PASV' ne supporte pas IPv6. –