Tester ma connexion FTP
Résolu
pcsystemd
Messages postés
702
Date d'inscription
Statut
Membre
Dernière intervention
-
pcsystemd Messages postés 702 Date d'inscription Statut Membre Dernière intervention -
pcsystemd Messages postés 702 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je dois depuis un script Bash récupérer un fichier sur un FTP, cela je sais faire mais ce que je ne sais pas comment faire c'est de tester ma connexion car si celle la ne se fait pas je souhaite mettre un exit 1 que la suite de mon script ne s'execute pas.
Voici mon code pour la connexion et la récupération de mon fichier :
Une idée?
Merci
L'accès au savoir est la première liberté que chaque homme devrait avoir.
je dois depuis un script Bash récupérer un fichier sur un FTP, cela je sais faire mais ce que je ne sais pas comment faire c'est de tester ma connexion car si celle la ne se fait pas je souhaite mettre un exit 1 que la suite de mon script ne s'execute pas.
Voici mon code pour la connexion et la récupération de mon fichier :
##### Connexion et recuperation du fichier sur le FTP ##### ftp -n ${FTPVER} << EOF quote USER ${FTSER} quote PASS ${FTAS} cd ${FTPPH} bin get monfichier monfichier quit EOF
Une idée?
Merci
L'accès au savoir est la première liberté que chaque homme devrait avoir.
A voir également:
- Tester ftp
- Flash drive tester - Télécharger - Divers Utilitaires
- Tester son pc - Guide
- Tester composant pc - Guide
- Tester disque dur - Télécharger - Informations & Diagnostic
- Tester compatibilité windows 11 - Guide
11 réponses
Il n'y a pas longtemps j'ai eu à écrire un script shell qui mettait en jeu ftp, et je t'avoue qu'avec le client de base ftp, j'ai vite arrêté au profit de lftp, bien plus simple à manipuler et plus complet.
Pour la syntaxe :
En shell, quelle que soit la commande que tu lances (du moment que ce n'est pas une built-in shell comme cd, history, logout etc..., ie quelque chose que which ou whereis parvient à localiser), tu peux récupérer son code d'exécution dans $?. Par convention, un programme qui se termine bien retourne 0.
En cas d'erreur il retourne une valeur dont la signification est généralement détaillée dans le man. Par exemple la commande rm retournera une valeur non nulle si le fichier passé en paramètre n'existe pas ou que les droits sont insuffisants.
Exemple :
Bonne chance
Pour la syntaxe :
man lftp
En shell, quelle que soit la commande que tu lances (du moment que ce n'est pas une built-in shell comme cd, history, logout etc..., ie quelque chose que which ou whereis parvient à localiser), tu peux récupérer son code d'exécution dans $?. Par convention, un programme qui se termine bien retourne 0.
En cas d'erreur il retourne une valeur dont la signification est généralement détaillée dans le man. Par exemple la commande rm retournera une valeur non nulle si le fichier passé en paramètre n'existe pas ou que les droits sont insuffisants.
man rm
Exemple :
#/bin/sh rm toto.txt if [ $? -eq 0 ] then echo "tout va bien" else echo "la commande a échoué !" >&2 fi # Fin du programme : on quitte proprement exit 0
Bonne chance
Bon j'ai testé mais apparement j'ai un souci car lorsque je lance le script j'ai un mot de passe qui m'est demandé ce qui ne doit pas être car j'ai bien le fichier test.ftp avec "quit" comme contenu. D'ailleurs si je mance mon script en DEBUG on peux le voir:
Voila le contenu de mon script qui nous intéresse :
Une idée?
Merci
L'accès au savoir est la première liberté que chaque homme devrait avoir.
./monscript.sh + case $DEBUG in ++ ftp toto.mondomaine.com ++ grep -c refused Password:
Voila le contenu de mon script qui nous intéresse :
if [ $(ftp toto.mondomaine.com < test.ftp 2>&1 | grep -c refused) -eq 1 ] then echo 'Problème de connexion au serveur FTP ' | mail -s "Problème de connexion au serveur FTP " toto@mail.com rm -f ${DIR}/test.ftp exit 1 else ftp -n toto.mondomaine.com << EOF quote USER ${PUSER} quote PASS ${PASS} cd ${PATH} bin get fichier fichier quit EOF fi
Une idée?
Merci
L'accès au savoir est la première liberté que chaque homme devrait avoir.
En faite je penses cela ne peux que fonctionner dans le cas ou le FTP n'est pas joignable mais si celui ci est joignable c'est a ce moment que j'ai la demande de mot de passe donc ce test ne me parait pas possible dans ce cas pour mon script.
Exemple:
la c'est ok mais si le FTP est joignable :
L'accès au savoir est la première liberté que chaque homme devrait avoir.
Exemple:
ftp ftppasjoignable.com ftp: connect: Connection refused ftp> quit
la c'est ok mais si le FTP est joignable :
ftp monftp.com Connected to monftp.com. Name (monftp.com:toto): quit 331 Password required for quit Password:
L'accès au savoir est la première liberté que chaque homme devrait avoir.
C'est bizarre chez moi ça marche avec un accès à mon FTP chez "free.fr" (le fichier "fich.ftp" contient la commande "bye") :
if [ $(ftp bonne_adresse.free.fr <fich.ftp 2>&1 | egrep -c 'unknown|refused' ) -eq 1 ]; then echo "Pas de serveur ftp"; else echo "Serveur ftp présent"; fi Serveur ftp présent $ if [ $(ftp mauvaise_adresse.free.fr <fich.ftp 2>&1 | egrep -c 'unknown|refused' ) -eq 1 ]; then echo "Pas de serveur ftp"; else echo "Serveur ftp présent"; fi Pas de serveur ftp $
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Curieux,
bon je vais de nouveau tester voir que ce ne soit pas moi qui fait une gaffe quelque part.
Merci
bon je vais de nouveau tester voir que ce ne soit pas moi qui fait une gaffe quelque part.
Merci
Bon définitvement , moi j'ai une demande de mot de passe, peut être que nous avons des confirgurations serveur diffèrentes ce qui pourrait expliquer que cela fonctionne pour toi et pas pour moi
Ce qui est curieux c'est que cette demande de mot de passe ne correspond a rien puisqu'il suffit que j'appui sur la touche Entrée et le script continue normalement!!!
Ce qui est curieux c'est que cette demande de mot de passe ne correspond a rien puisqu'il suffit que j'appui sur la touche Entrée et le script continue normalement!!!
J'éssaie de passer par un autre test en utilisant telnet :
Mon souci est que lorsque la connexion ne fonctionne pas, normalement la commande :
devrait faire un ctrl c (commande trap et exit 2 pour un INT) hors ce n'est pas le cas.
Une idée?
Merci
if [ $(telnet domaine.com 21 < ${DIR}/test.telnet | egrep -c 'Connected') -eq 1 ] then echo "OK" else trap "echo Problème de connexion;exit 2" exit 1 fi
Mon souci est que lorsque la connexion ne fonctionne pas, normalement la commande :
trap "echo Problème de connexion;exit 2"
devrait faire un ctrl c (commande trap et exit 2 pour un INT) hors ce n'est pas le cas.
Une idée?
Merci
Tant que le if n'est pas évalué (et donc tant que la commande telnet n'a pas pris fin), la commande trap n'est pas évaluée. C'est donc normal.
À mon avis il faut plutôt regarder du côté de l'opérateur & qui va permettre de lancer telnet en arrière plan tandis que le fil principal va attendre par exemple 2s avec un sleep. Au bout de 2s on relève le PID de telnet avec :
S'il est initialisé, on dégomme telnet à coup de kill.
Bon soyons clairs :
1) Ce n'est pas choquant que ton script plante si la connexion ftp ne se fait pas. Ce n'est pas à ton script de le rattraper comme je l'ai déjà dit plusieurs fois. Donc à mon humble avis, tu perds ton temps, car tu ne peux dans l'absolu pas forcément prévoir tous les motifs de plantage de commandes invoquées par ton script.
2) La solution que je te propose est "à l'arrache". En outre si des connexion telnet vers domain.com sont lancées par autre chose que ton script, c'est dommage ton script risque de les dégommer.
À mon avis il faut plutôt regarder du côté de l'opérateur & qui va permettre de lancer telnet en arrière plan tandis que le fil principal va attendre par exemple 2s avec un sleep. Au bout de 2s on relève le PID de telnet avec :
pid=$(ps aux | grep telnet | grep domain.com | awk '{print $2}'
S'il est initialisé, on dégomme telnet à coup de kill.
Bon soyons clairs :
1) Ce n'est pas choquant que ton script plante si la connexion ftp ne se fait pas. Ce n'est pas à ton script de le rattraper comme je l'ai déjà dit plusieurs fois. Donc à mon humble avis, tu perds ton temps, car tu ne peux dans l'absolu pas forcément prévoir tous les motifs de plantage de commandes invoquées par ton script.
2) La solution que je te propose est "à l'arrache". En outre si des connexion telnet vers domain.com sont lancées par autre chose que ton script, c'est dommage ton script risque de les dégommer.
Bon en fin j'ai réussis a résoudre cette demande de mot de passe en passant tout simplement le paramètre -n de la commande FTP :
Par contre j'ai un autre souci maintenant.
En effet si j'arrête mon serveur FTP et que j'essaie de me conecter en console, il y a bien :
hors si je lance mon script en DEBUG, il ne matche pas 'refused' et donc il rentre dans mon else.
Voici le contenu de mon script de test :
Voici le résultat lorsque je l'execute :
Une idée
Merci
L'accès au savoir est la première liberté que chaque homme devrait avoir.
if [ $(ftp -n mondomain.com < test.ftp 2>&1 | grep -c 'unknown|refused') -eq 1 ]
Par contre j'ai un autre souci maintenant.
En effet si j'arrête mon serveur FTP et que j'essaie de me conecter en console, il y a bien :
ftp mondomaine.com ftp: connect: Connection refused ftp> quit
hors si je lance mon script en DEBUG, il ne matche pas 'refused' et donc il rentre dans mon else.
Voici le contenu de mon script de test :
if [ $(ftp -n mondomain.com < test.ftp 2>&1 | grep -c 'unknown|refused') -eq 1 ] then echo 'Problème de connexion ' | mail -s "Problème de connexion " mail@mail.com exit 1 else echo "Ok" fi exit 0
Voici le résultat lorsque je l'execute :
./test.sh + case $DEBUG in + echo quit ++ ftp -n mondomain.com ++ grep -c 'unknown|refused' + '[' 0 -eq 1 ']' + echo Ok Ok + exit 0
Une idée
Merci
L'accès au savoir est la première liberté que chaque homme devrait avoir.
En shell, quelle que soit la commande que tu lances (du moment que ce n'est pas une built-in shell comme cd, history, logout etc..., ie quelque chose que which ou whereis parvient à localiser), tu peux récupérer son code d'exécution dans $?. Par convention, un programme qui se termine bien retourne 0.
A part pour ftp ;-((
Même si le site n'existe pas (et je suppose que s'il ne répond pas c'est pareil), ftp prend la main et attend une commande ;-(
Donc à part en utilisant des outils réseau (mais je ne sais pas lesquels), je ne vois pas comment tester la disponibilité du serveur ;-\
Bon, chez moi la commande ftp renvoie "Connection refused" quand il n'y a personne à l'autre bout du fil.
Du coup un test comme ça doit suffire :
... avec dans toto.ftp :
Après on peut compléter les tests avec nmap etc... Mais de toute façon je ne suis pas persuadée que ce soit le job du script de rattraper ce genre d'erreur. Il plante et c'est tout, le message d'erreur ftp arrivera au moment d'invoquer la commande. Non ?
Autre possibilité, on travaille avec ssh et scp où l'on pourra directement tester le retour de la commande.
Bonne chance
Chez moi aussi mais uniquement avec du localhost ;-\
Sinon, oui ta solution semble faire l'affaire, en espérant que ça marche sur un site existant et momentanément indisponible ;-)
Ah ben très bien c'est le test que j'avais fait -_-
J'ai donné une mauvaise piste apparemment.
Sinon, oui ta solution semble faire l'affaire, en espérant que ça marche sur un site existant et momentanément indisponible ;-)
Oui c'est pas forcément évident pour faire les tests.