[script bash] problème téléchargement en FTP


#1

Hello à toutes et tous.

J’essaie de faire un script qui me permette de télécharger un fichier en ftp.

J’ai essayé ce script :

 #!/bin/bash
sudo python /diagbox/web/scripts/gpio/led_32_on.py
sudo python /diagbox/web/scripts/gpio/led_10_on.py

Suser=$1
Spass=$2
Sip=$3
Sport=$4
Sname=$5
Slight=$6

#Veriff si présence du fichier resultat
echo "verif presence fichier vider_iso"
if [ -f "/diagbox/web/tmp/maj_resultat" ];then
	sudo rm /diagbox/web/tmp/maj_resultat
fi

#Aller dans le bon dossier
cd /StockImg

#Vide le dossier s'il y a qqch
echo "vider le dossier stock iso"
if sudo rm -rf /StockImg/*; then
	echo "ok"
else
	sudo python /diagbox/web/scripts/gpio/led_32_off.py
	sudo python /diagbox/web/scripts/gpio/led_10_off.py
	sudo echo 'koo'	>> /diagbox/web/tmp/maj_resultat
	exit
fi

#Lancer le téléchargement
if sudo wget --ftp-user=$1 --ftp-password=$2 ftp://$3:$4/iso/$5;then
	echo 'ok'
else
	sudo python /diagbox/web/scripts/gpio/led_32_off.py
	sudo python /diagbox/web/scripts/gpio/led_10_off.py
	echo 'kooo' >> /diagbox/web/tmp/maj_resultat
	exit
fi

#Renommer fichier
if sudo mv /StockImg/$5 /StockImg/$6;then
	echo 'ok' >> /diagbox/web/tmp/maj_resultat
else
	sudo python /diagbox/web/scripts/gpio/led_32_off.py
	sudo python /diagbox/web/scripts/gpio/led_10_off.py
	echo 'kooooooo' >> /diagbox/web/tmp/maj_resultat
	exit
fi



exit

Ca fonctionne quand je suis dans le réseau ( en Lan).
Mais en extérieur ça bloque.
J’ai pourtant ouvert tous les ports pour le mode passif.
Et ça fonctionne quand je me connecte avec filezila en mode passif.

==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD (1) /iso ... done.
==> SIZE diagbox_G0R0C1.light ... 1105616969
==> PASV ... couldn't connect to 192.168.3.75 port 49957: Connection timed out
Retrying.

==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD (1) /iso ... done.
==> SIZE diagbox_G0R0C1.light ... 1105616969
==> PASV ... couldn't connect to 192.168.3.75 port 49957: Connection timed out
Retrying.

Du coups j’ai essayé avec la commande ftp :

#!/bin/sh

# constantes
HOST=$1
LOGIN=$2
PASSWORD=$3
PORT=$4

# le transfert lui même
ftp -i -n -v $HOST $PORT << END_SCRIPT
quote USER $LOGIN
quote PASS $PASSWORD
mget $5
quit
END_SCRIPT

Voila ce que j’ai en retour :

Connected to domoticity.ddns.net.
220 Serveur FTP ::ffff:192.168.3.75 prêt
331 Mot de passe requis pour diagbox
230 Utilisateur diagbox authentifié
221 Au revoir.

Mais aucun fichier télécharger ( la commande se coupe au bout de 2 seconde alors qu’un fichier de 1go devrait venir :slight_smile: )

Ma préférence serait pour wget car je peux le manipuler avec des if et else, que la commande ftp je ne vois pas comment faire.

Si quelqu’un voit ma grosse erreur je suis preneur :slight_smile:

Merci par avance


#2

Hello,

quand tu lances ça, tu es bien sur ton LAN ? Parce que sinon c’est normal, l’adresse 192.168.3.75 est une adresse locale.
Il faudrait donner plus d’infos sur l’infrastructure: où est installé le serveur FTP ? Est-il routable depuis l’extérieur du LAN ?
Regarde plutôt de ce côté là, plutôt que d’essayer différentes méthodes (wget, ftp…) pour récupérer le fichier.


#3

Hello
merci pour ta réponse.
Alors en LAN ca fonctionne.
J’utilise un noip dns à partir du wan.

quand je tape cette adresse dans filezilla par exemple, ca fonctionne le téléchargement.

J’ai vérifié les règles nat pat dans ma Livebox et routeur et tous les ports passifs sont redirigés vers le serveur voulu. De plus le routeur est en DMZ dans la Livebox.
Pas de parefeur dans le serveur.


#4

OK, donc on va se concentrer sur cette partie:

Au niveau de la redirection, le port que tu indiques dans l’argument $4 est bien géré par le NAT ?
Tu peux essayer cette commande seule (sans le reste du script) depuis le WAN ?


#5

Hello
Merci pour ton aide.
Alors oui le port de $4 est géré par le nat.
J’ai également mis tous les ports du FTP passif dans le nat.
J’ai essayé la commande en isolant du script, aucune erreur remontee mais pas de fichier téléchargé.
Avec la commande wget en mode FTP, l’authentification se fait bien mais après ça bloqué.
J’ai essayé en mode passif et actif.


#6

Hello.
J’ai résolu mon problème.
Après des nuits blanches à rechercher voici la réponse :slight_smile:

Dans le fichier conf de proftpd, il faut renseigner les ports pour le mode passif
Mais aussi cette ligne : masquaradeaddress
:slight_smile: