J'ai configuré le serveur FTP dans Ubuntu 12.04 LTS.
Maintenant, lorsque je tente de me connecter au serveur FTP à partir de Windows 7 via la ligne de commande ftp.exe
, la connexion est établie mais je ne parviens pas à obtenir la liste des répertoires. Je reçois une erreur
200 PORT command successful. Consider using PASV.
425 Failed to establish connection.
Essayez d’utiliser la commande passive
avant d’utiliser ls
.
Depuis un client FTP, pour vérifier si le serveur FTP prend en charge le mode passif, tapez quote PASV
après la connexion.
Voici des exemples de connexion à un serveur vsftpd avec le mode passif activé et désactivé
vsftpd
avec pasv_enable=NO
:
# ftp localhost
Connected to localhost.localdomain.
220 (vsFTPd 2.3.5)
Name (localhost:john): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quote PASV
550 Permission denied.
ftp>
vsftpd
avec pasv_enable=YES
:
# ftp localhost
Connected to localhost.localdomain.
220 (vsFTPd 2.3.5)
Name (localhost:john): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quote PASV
227 Entering Passive Mode (127,0,0,1,173,104).
ftp>
Vous utilisez le FTP en mode actif.
Configurer le FTP en mode actif peut être fastidieux de nos jours à cause des pare-feu et des NAT.
C'est probablement à cause de votre pare-feu local ou de NAT que le serveur n'a pas été en mesure de se reconnecter à votre client pour établir une connexion de transfert de données.
Ou bien votre client n'a pas connaissance de son adresse IP externe et fournit une adresse interne au serveur (dans la commande PORT
), que le serveur n'est évidemment pas en mesure d'utiliser. Mais cela ne devrait pas être le cas, car vsftpd, par défaut, rejette une adresse de transfert de données non identique à l’adresse source de la connexion de contrôle FTP (directive port_promiscuous
).
Voir mon article Configuration réseau pour le mode actif .
Si possible, utilisez un mode passif, car il ne nécessite généralement aucune configuration supplémentaire côté client. C’est aussi ce que le serveur vous a suggéré par "Pensez à utiliser PASV". La PASV
est une commande FTP utilisée pour passer en mode passif.
Malheureusement, le client de ligne de commande FTP Windows (le ftp.exe
) ne prend pas du tout en charge le mode passif. Cela le rend plutôt inutile de nos jours.
Utilisez plutôt un autre client de ligne de commande Windows FTP tiers. La plupart des autres prennent en charge le mode passif.
Par exemple, Client FTP WinSCP utilise par défaut le mode passif. Un guide est disponible pour convertir Script FTP Windows en script WinSCP .
(Je suis l'auteur de WinSCP)
En fait, votre pare-feu de fenêtre bloque la connexion, vous devez donc entrer ces commandes dans cmd.exe à partir de l'administrateur.
1) netsh advfirewall firewall add rule name="FTP" dir=in action=allow program=%SystemRoot%\System32\ftp.exe enable=yes protocol=tcp
2) netsh advfirewall firewall add rule name="FTP" dir=in action=allow program=%SystemRoot%\System32\ftp.exe enable=yes protocol=udp
Si quelque chose ne va pas, vous pouvez revenir en arrière:
1) netsh advfirewall firewall delete rule name="FTP" program=%SystemRoot%\System32\ftp.exe
Vous devez utiliser le mode passif.
Si vous utilisez le client linux, utilisez pftp
ou ftp -p
.
De man ftp
:
-p Use passive mode for data transfers. Allows use of ftp in environments where a firewall prevents connections from the outside world back to the client machine. Requires that the ftp server support the PASV command. This is the default if invoked as pftp.