Serveur FTP en bash
patrice86
Messages postés
1380
Date d'inscription
Statut
Membre
Dernière intervention
-
patrice86 Messages postés 1380 Date d'inscription Statut Membre Dernière intervention -
patrice86 Messages postés 1380 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'essaie (en vain) d'effectuer un serveur FTP le tout en bash.
Pour cela, j'ai créer 3 fichiers bash et un backpipe (avec mkfifo)
L'idée étant que :
- lorsque j'exécute mon fichier serveur.sh, il lance à l'aide de la commande nc (netcat) le serveur en utilisant le backpipe (ok ça fonctionne)
- mon client se connecte dessus (fonctionne) et peut éxécuter des lignes de commandes directement sur le serveur (cd, ls...) ça fonctionne.
Ce que j'aimerai faire maintenant c'est que lorsque je lance mon fichier client.sh, il peut soit exécuter des commandes en local soit elles sont exécuter sur le serveur (voir code du fichier client.sh, cela fonctionne).
Mais je n'arrive pas à envoyer des fichiers du client vers le serveur et que le client puisse récupérer des fichiers qui sont sur le serveur directement chez lui !
Il faut utiliser la commande get ? Je n'y comprend rien du tout ! Je vous demande donc un peu d'aide svp =)
Voici les différents fichiers:
serveur.sh
monscript.sh
client.sh
Merci BEAUCOUP de votre aide =)
J'essaie (en vain) d'effectuer un serveur FTP le tout en bash.
Pour cela, j'ai créer 3 fichiers bash et un backpipe (avec mkfifo)
L'idée étant que :
- lorsque j'exécute mon fichier serveur.sh, il lance à l'aide de la commande nc (netcat) le serveur en utilisant le backpipe (ok ça fonctionne)
- mon client se connecte dessus (fonctionne) et peut éxécuter des lignes de commandes directement sur le serveur (cd, ls...) ça fonctionne.
Ce que j'aimerai faire maintenant c'est que lorsque je lance mon fichier client.sh, il peut soit exécuter des commandes en local soit elles sont exécuter sur le serveur (voir code du fichier client.sh, cela fonctionne).
Mais je n'arrive pas à envoyer des fichiers du client vers le serveur et que le client puisse récupérer des fichiers qui sont sur le serveur directement chez lui !
Il faut utiliser la commande get ? Je n'y comprend rien du tout ! Je vous demande donc un peu d'aide svp =)
Voici les différents fichiers:
serveur.sh
#!/bin/bash #Script permettant de lancer un serveur en fonction des paramètres indiqués lors de l'appel du script #ligne de commande pour éxécuter le script : sh serveur.sh adresse port nc -l $1 -k $2 < ./tmp/backpipe | ./tmp/monscript.sh 1> ./tmp/backpipe
monscript.sh
<#!/bin/bash echo "Pour lister les fichiers, taper : lister" echo "Pour naviguer dans le dossier, taper : nav" echo "Pour quitter, taper : exit" echo "Pour accèder au dossier parent, taper: retour" read cmd while [ $cmd!="exit" ]; do case $cmd in "lister")ls;echo "Pour lister les fichiers, taper : lister" echo "Pour naviguer dans le dossier, taper : nav" echo "Pour quitter, taper : exit" echo "Pour accèder au dossier parent, taper: cd ..";; "nav") echo "A quel dossier voulez-vous accéder ?" while read entree; do cd $entree; break; done echo "Pour lister les fichiers, taper : lister" echo "Pour naviguer dans le dossier, taper : nav" echo "Pour quitter, taper : exit" echo "Pour accèder au dossier parent, taper: cd ..";; "retour")cd ..;echo "Pour lister les fichiers, taper : lister" echo "Pour naviguer dans le dossier, taper : nav" echo "Pour quitter, taper : exit" echo "Pour accèder au dossier parent, taper: cd ..";; esac read cmd done
client.sh
#!/bin/bash #Script permettant au client de communiquer avec le serveur #ligne de commande pour éxécuter le script : sh serveur.sh adresse port while [ $cmd!="exit" ]; read cmd while [ $cmd!="exit" ]; do case $cmd in "lister")ls;; "listerserveur")ls | nc $1 $2; esac read cmd done
Merci BEAUCOUP de votre aide =)
A voir également:
- Serveur FTP en bash
- Changer serveur dns - Guide
- Serveur dns gratuit - Guide
- Serveur entrant et sortant - Guide
- Verification de l'identité du serveur impossible - Forum iPhone
- Core ftp - Télécharger - Téléchargement & Transfert
2 réponses
Salut,
Avant d'aller plus loin, il y a une erreur dans ta syntaxe
Avant d'aller plus loin, il y a une erreur dans ta syntaxe
[ $cmd!="exit" ], il faut des espaces de part et d'autre de
!=, tout comme avec des simples crochets il est préférable de mettre des quotes doubles autour des variables et d'écrire ces mêmes variables avec des accolades ;-\
[ "${cmd}" != "exit" ]
Pour cela j'ai corrigé =) Merci
je change les codes.
Maintenant il me reste à envoyer des fichiers du client vers le serveur et inversement.
monscript.sh
client.sh
je change les codes.
Maintenant il me reste à envoyer des fichiers du client vers le serveur et inversement.
monscript.sh
#!/bin/bash
echo "Saisir une commande (exit pour sortir)"
while read cmd;
do
operateur=$(echo $cmd | cut -d" " -f1);
operande=$(echo $cmd | cut -d" " -f2);
while [ $operateur != "exit" ] ;
do
case $operateur in
"ls") if [ "$operande" = "-a" ]
then
ls -a
elif [ "$operande" = "-l" ]
then ls -l
elif [ "$operande" = "-R" ]
then ls -R
else
ls
fi
;;
"cd")cd $operande;;
"exit")break;;
esac
break
done
echo "Saisir une commande (exit pour sortir)"
done
client.sh
#!/bin/bash
#Script permettant au client de communiquer avec le serveur
#ligne de commande pour éxécuter le script : sh serveur.sh adresse port
nc $1 $2