script shell sftp - vérification dépose fichier

script shell sftp - vérification dépose fichier - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 28-08-2008 à 10:33:15    

bonjour,
je suis débutant en unix et en scripting et je dois ajouté un controle de transfert de fichier dans mon script sftp :
 
/usr/bin/expect << EOF
spawn /usr/bin/sftp usename@site
expect "password:"
send -- "mot_de_passe\r"
expect "sftp>"
send -- "put file*\r"
expect "sftp>"
send -- "exit\r"
EOF
 
j'aurai besoin d'aide pour finalisé mon script pour qu'il recopie le fichier dans un autre dossier et vérifier que celui-ci est ok. ne sachant pas scripter, je vous remercie de votre aide


Message édité par begindebian le 28-08-2008 à 13:15:07
Reply

Marsh Posté le 28-08-2008 à 10:33:15   

Reply

Marsh Posté le 28-08-2008 à 13:35:30    

cp ? md5sum ?
 


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 28-08-2008 à 13:41:54    

pardon? comme je disais je débute en unix et en scripting!!!!
 
je pense par contre que cp marchera pas en sftp!!  
par contre je vois pas le rapport avec md5sum


---------------
débutant sur Debian et débutant en scripting
Reply

Marsh Posté le 28-08-2008 à 13:46:31    

begindebian a écrit :

pardon? comme je disais je débute en unix et en scripting!!!!
 
je pense par contre que cp marchera pas en sftp!!  
par contre je vois pas le rapport avec md5sum


lol!!!!
 
je pense par contre que tu devrais mieux explqiuer ce que tu veux faire!!
par contre moi je vois le rapport entre md5sum et vérifier que le fichier est bien uploadé correctement, mais c'est peut être pas ce que tu souhaite.
 
Donc ré-explique bien ce que tu souhaite faire :)


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 28-08-2008 à 13:58:23    

alors mon script transfert en sftp un fichier hors pour le moment je peut pas dire si le transfert se passe bien, mon chef m'a demander de faire en sorte que une fois transferer je recopie le fichier fraichement déposé dans un autre dossier afin de valider que celui-ci est ok.


---------------
débutant sur Debian et débutant en scripting
Reply

Marsh Posté le 28-08-2008 à 14:20:19    

begindebian a écrit :

alors mon script transfert en sftp un fichier hors pour le moment je peut pas dire si le transfert se passe bien, mon chef m'a demander de faire en sorte que une fois transferer je recopie le fichier fraichement déposé dans un autre dossier afin de valider que celui-ci est ok.

tu veux dire que tu veux refaire la copie dans l'autre sens ?
 
He bien tu n'as qu'à refaire le même script expect en remplacant le "put" par un "get". Si tu te places au préalable dans un autre répertoire (un rep temporaire par exemple), tu disposes de la version originale dans le répertoire d'origine, et de la version après aller-retour dans le répertoire temporaire. Tu fais un md5sum des fichiers dans ces deux répertoires et tu vérifies que ça correspond bien.
 
Commence par faire la copie dans les deux sens, et si tu as des problèmes pour la comparaison, reviens ici pour qu'on t'aide.


---------------
TriScale innov
Reply

Marsh Posté le 28-08-2008 à 14:22:00    

oui dans l'autre sens !!!! le problème étant que justement que je sais pas l'écrire en script!!!!
si quelqu'un pouvais m'aider à l'écrire ca m'arrangerai.
 
le dossiers a partir duquel part le ftp contient un sous-dossier 'TMP'. j'aimerai l'utilisé pour le script.
 
merci

Message cité 1 fois
Message édité par begindebian le 28-08-2008 à 14:23:55

---------------
débutant sur Debian et débutant en scripting
Reply

Marsh Posté le 28-08-2008 à 14:58:09    

begindebian a écrit :

oui dans l'autre sens !!!! le problème étant que justement que je sais pas l'écrire en script!!!!
si quelqu'un pouvais m'aider à l'écrire ca m'arrangerai.
 
le dossiers a partir duquel part le ftp contient un sous-dossier 'TMP'. j'aimerai l'utilisé pour le script.
 
merci

C'est toi qui as écrit le script expect donné plus haut ? Tu as compris comment ça marchait ? Est-ce qu'il est déjà inclus dans un shell-script plus grand ou bien pour l'instant tu copie-colles ça dans un terminal ?
 
Commence par inclure ta commande expect dans un shell-script. Ensuite, tu la copie-colles et tu modifies légèrement la copie pour que ça fasse le retour au lieu de l'aller (comme je te l'ai dit plus haut, c'est une histoire de "put" qui se transforme en "get" ).
 
Une fois que tu as ça, poste ton script ici et on regardera la suite.


---------------
TriScale innov
Reply

Marsh Posté le 28-08-2008 à 15:15:41    

bon pour commencer:
 
1) vérifier une copie en faisant une autre copie, tu trouve que c'est un *bon* moyen de vérifier que l'opération c'est bien déroulée ?   moi non => utilise md5sum
 
2) tu sé pas scripté!!! é ben appren!!! on t'aidera!!!! mais faut s'y mettre aussi!!!
 
aller, des pistes:  
 
 
- tu utilise md5sum pour vérifier que la copie est intégrale
- tu utilise ssh avec une commande (non interactive) qui te permet de récupérer la fameuse md5sum du fichier distant
 
et bonne recherches

Message cité 1 fois
Message édité par zecrazytux le 28-08-2008 à 15:23:23

---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 28-08-2008 à 15:16:49    

mon script donne ça :  
/usr/bin/expect << EOF
spawn /usr/bin/sftp login@site_remote
expect "password:"
send -- "mot_depassse\r"
expect "sftp>"
send -- "put "file"\r"
expect "sftp>"
send -- "get "file"\r $TMP"
expect "sftp>"
send -- "exit\r"
EOF


---------------
débutant sur Debian et débutant en scripting
Reply

Marsh Posté le 28-08-2008 à 15:16:49   

Reply

Marsh Posté le 28-08-2008 à 15:17:32    

et ?
 
edit: ah, y a aussi des erreurs de quoting...

Message cité 1 fois
Message édité par zecrazytux le 28-08-2008 à 15:28:37

---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 28-08-2008 à 15:20:36    

a savoir "file" est remplacer par le nom du fichier, il n'y a pas de " " .


---------------
débutant sur Debian et débutant en scripting
Reply

Marsh Posté le 28-08-2008 à 15:29:13    

begindebian a écrit :

a savoir "file" est remplacer par le nom du fichier, il n'y a pas de " " .


y a pas d'accent à Debian.


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 28-08-2008 à 15:30:12    

ben la c'est mon script que j'ai mis, mais faut absolument que j'ai un controle pour validé la bonne réception du fichier.


---------------
débutant sur Debian et débutant en scripting
Reply

Marsh Posté le 28-08-2008 à 15:31:24    

ok merci zecrazytux, je pensais qu'il y en avait un!!


---------------
débutant sur Debian et débutant en scripting
Reply

Marsh Posté le 28-08-2008 à 15:33:40    

begindebian a écrit :

ben la c'est mon script que j'ai mis, mais faut absolument que j'ai un controle pour validé la bonne réception du fichier.


il ne fonctionne pas.


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 28-08-2008 à 15:36:16    

c'est pour ça que j'ai besoin d'aide!!!
$TMP renvoie vers le dossier tmp qui est dans le home/nom_client sur mon serveur qui est le dossier d'origine des fichiers.


---------------
débutant sur Debian et débutant en scripting
Reply

Marsh Posté le 28-08-2008 à 15:39:39    

zecrazytux a écrit :

et ?
 
edit: ah, y a aussi des erreurs de quoting...


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 28-08-2008 à 15:53:54    

Afin de contrôler que ton fichier est correctement uploadé tu le move ? Je vois pas le rapport ..
 
Non, tu fais un md5sum avant le transfert, tu stockes ça quelque part, tu fait le transfert FTP de ton fichier, après tu md5sum le fichier transféré pour voir si c'est bon..


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 28-08-2008 à 15:55:49    

zecrazytux a écrit :

1) vérifier une copie en faisant une autre copie, tu trouve que c'est un *bon* moyen de vérifier que l'opération c'est bien déroulée ?   moi non => utilise md5sum

Ce qu'il veut faire, c'est un sftp put, suivi d'un sftp get, suivi d'une comparaison (avec md5sum) entre le fichier de départ et le fichier qui a effectué un aller-retour. Et je ne trouve pas que ce soit un mauvais moyen de tester le bon déroulement de l'opération de transfert.
 
 

zecrazytux a écrit :

- tu utilise ssh avec une commande (non interactive) qui te permet de récupérer la fameuse md5sum du fichier distant

Pas sûr qu'il ait la possibilité de le faire (son accès SSH à la machine distante est peut-être restreint à SFTP)


---------------
TriScale innov
Reply

Marsh Posté le 28-08-2008 à 16:20:00    

et en script ca donne quoi? parce que dire ce qu'il faut faire, ca je comprend bien mais je sais pas le traduire en script!!!


---------------
débutant sur Debian et débutant en scripting
Reply

Marsh Posté le 28-08-2008 à 16:29:21    

begindebian a écrit :

et en script ca donne quoi? parce que dire ce qu'il faut faire, ca je comprend bien mais je sais pas le traduire en script!!!

Tu as mis ta commande expect dans un shell-script ? Tu as testé ce que ça donnait ? Ca marche ? (à mon avis non parce que tu as des problèmes de quotes dans tous les sens).
 
Je me doute bien que tu ne sais pas comment écrire ton script, mais si on te donne du tout-cuit, tu n'auras rien appris. Commence par faire un truc propre dans un fichier, remplace tes noms de fichiers par des variables du shell. Ensuite, on t'aidera pour faire la suite en utilisant des md5sum.
 
Par ailleurs, donne plus de précisions sur ta situation : est-ce que tu as un accès SSH complet au système distant, ou bien seulement SFTP ?


---------------
TriScale innov
Reply

Marsh Posté le 29-08-2008 à 09:15:46    

mon script marche actuellement en complet ca donne ca :
#!/bin/sh
 
CLIENT=nom_client
LOG=log
FILE=$1
REMOTEDIR=$2
REP=/home/edidev/client/snd
ARCHIVE=/home/edidev/client/archive_snd
LOG=/home/edidev/client/logs/envois`date +%Y%m%d`
TMP=/home/edidev/client/tmp
 
REPORT=${BASE}/report
TOFILE=to.err
SUBJECTFILE=subject.err
BODYFILE=body.err
COMMENT="Erreur lors de l'envoi FTP vers $CLIENT"
INTERVAL=60
 
cd $REP
 
/usr/bin/expect << EOF
spawn /usr/bin/sftp login@site_ftp_client
expect "password:"
send -- "mot_de_passe\r"
expect "sftp>"
send -- "put file\r"
expect "sftp>"
send -- "get file\r $TMP"
expect "sftp>"
send -- "exit\r"
EOF


---------------
débutant sur Debian et débutant en scripting
Reply

Marsh Posté le 29-08-2008 à 09:17:11    

alors en face c'est sur ftp sur ssh


---------------
débutant sur Debian et débutant en scripting
Reply

Marsh Posté le 29-08-2008 à 09:35:36    

begindebian a écrit :

mon script marche actuellement en complet ca donne ca :

OK, c'est un bon début. T'es sûr que ça marche bien et que ça fait ce que tu veux ?
 
Perso, j'ai des doutes concernant les lignes 'send -- "put file\r"' et 'send -- "get file\r $TMP"', qui ne font pas apparaître la variable $FILE et pour lesquelles le placement du '\r' semble un peu aléatoire...
Mais bon si tu dis que ça marche, c'est sans doute que tu as testé  :sarcastic:  
 

begindebian a écrit :

alors en face c'est sur ftp sur ssh

Donc tu as la possiblité de te connecter en ssh directement ?
 
Dans ce cas, pas la peine de faire un aller-retour : tu te connectes directement en ssh sur la machine distante et tu exécutes md5sum sur le fichier nouvellement copié. Ensuite tu compares  avec le md5sum local pou voir si ça colle.
 
Hints :
man ssh
man md5sum
man test


---------------
TriScale innov
Reply

Marsh Posté le 29-08-2008 à 10:14:42    

la commande 'send -- "put file\r"'  fonctionne trés bien par contre 'send -- "put file\r"' ça c'est moi qui l'est créer en sachant pas du tout ce que ca fait. le mot "file" remplace le nom du fichier mis en dur.
je viens de me rendre compte d'une bétise : la ligne send -- "get file\r $TMP" n'est pas bonne ce serait plutot send -- "get file $TMP\r".
 
le \r permet de valider la ligne et simuler la touche "entrée" du clavier.  
 
je me connecte actuellement en ssh sur la machine distante avec un client ftp sans problème oui.
 
 
si je comprend bien à la fin de mon script je doit rajouté un truc du genre :
send -- "md5sum file > toto.txt\r"  
expect "sftp>"
c'est a peut près ça???? par contre le fichier toto qui fait mon rapport sera à quel endroit ??? sur le ftp distant?
 


---------------
débutant sur Debian et débutant en scripting
Reply

Marsh Posté le 29-08-2008 à 10:59:31    

begindebian a écrit :

la commande 'send -- "put file\r"'  fonctionne trés bien par contre 'send -- "put file\r"' ça c'est moi qui l'est créer en sachant pas du tout ce que ca fait. le mot "file" remplace le nom du fichier mis en dur.

pourquoi tu mets le nom du fichier en dur alors que tu as créé une variable $FILE qui est visiblement justement destinée à contenir le nom du fichier ?
 

begindebian a écrit :

je viens de me rendre compte d'une bétise : la ligne send -- "get file\r $TMP" n'est pas bonne ce serait plutot send -- "get file $TMP\r".

C'est bien, mais de toutes façons si tu peux te connecter en ssh sur la machine distante, le transfert retour devient inutile.
 

begindebian a écrit :

je me connecte actuellement en ssh sur la machine distante avec un client ftp sans problème oui.

Ca je le sais depuis le début. Ce que je voudrais savoir, c'est si tu peux te connecter en ssh sans restrictions (c'est à dire : est-ce que tu peux te connecter avec un client ssh et ouvrir un shell sur la machine distante ?)
 

begindebian a écrit :

si je comprend bien à la fin de mon script je doit rajouté un truc du genre :
send -- "md5sum file > toto.txt\r"

Non, c'est pas du tout ça : ton client sftp ne comprend pas des commandes comme md5sum. Tu mélanges tout : shell-script, expect, sftp, ssh....
 
Ecoute, j'ai l'impression que tu ne comprends pas ce que tu fais. Tu es en train d'essayer de faire un script alors que :
1- tu ne sais pas comment il faudrait faire de manière interactive
2- tu ne connais pas le langage de script
 
Commence par effectuer ton transfert et sa vérification à la main, de manière interactive :
1- tu transferes via sftp ton fichier sur la machine distante (visiblement, tu sais déjà faire ; sinon man sftp)
2- tu fais un md5sum local (man md5sum)
3- tu te logges en ssh sur la machine distante (man ssh)
4- tu fais un md5sum sur la machine distante
5- tu compares si c'est les deux mêmes md5sum
 
Une fois que tu auras effectué chacune de ces étapes à la main, tu pourras t'atteler au script lui-même pour automatiser tout ça.


---------------
TriScale innov
Reply

Marsh Posté le 29-08-2008 à 11:11:19    

j'ai rajouté la variable entre temps et je dois modifier mon script en conséquence!! pour la machine distante je suis limité.  
 
Ecoute, j'ai l'impression que tu ne comprends pas ce que tu fais. Tu es en train d'essayer de faire un script alors que :  
1- tu ne sais pas comment il faudrait faire de manière interactive  
2- tu ne connais pas le langage de script  
-> c'est tout a fait ça!!!!
 
 
scuse j'avais pas compris la bonne chose, j'ai pas accès en direct en via ssh par putty sur la machine, j'y est accès qu'en sftp


---------------
débutant sur Debian et débutant en scripting
Reply

Marsh Posté le 29-08-2008 à 11:19:26    

begindebian a écrit :

j'ai rajouté la variable entre temps et je dois modifier mon script en conséquence!! pour la machine distante je suis limité.

OK. On s'occupera de ça plus tard, quand tu auras compris comment il faut procéder.
 

begindebian a écrit :

scuse j'avais pas compris la bonne chose, j'ai pas accès en direct en via ssh par putty sur la machine, j'y est accès qu'en sftp

OK, c'est bien ce qu'il me semblait depuis le départ.
 
Donc le nouveau mode opératoire est :
1- connexion en sftp à la machine distante :
  1a- transfert "aller" (put)
  1b- transfert "retour" dans le répertoire temporaire (get)
2- md5sum du fichier d'origine
3- md5sum du fichier dans le répertoire temporaire
4- comparaison des deux (visuellement pour l'instant)
 
Normalement, tu devrais déjà savoir faire tout ça à la main de manière interactive dans un terminal. Est-ce que c'est vraiment le cas ?


---------------
TriScale innov
Reply

Marsh Posté le 29-08-2008 à 13:36:14    

heu non!!
je sais faire le put et le get mais c'est tout!! et encore pour le get je suis pas sur de savoir le déplacer dans un autre dossier

Message cité 1 fois
Message édité par begindebian le 29-08-2008 à 13:36:53

---------------
débutant sur Debian et débutant en scripting
Reply

Marsh Posté le 29-08-2008 à 13:39:44    

begindebian a écrit :

heu non!!
je sais faire le put et le get mais c'est tout!!

C'est bien là qu'est le problème : utiliser sftp est à peu près 50x plus dur que de faire un md5sum, mais tu ne t'en rends même pas compte...
 
man md5sum (ou google) pour savoir ce que fait md5sum et comment on l'utilise.


---------------
TriScale innov
Reply

Marsh Posté le 29-08-2008 à 13:43:45    

ca donne ca alors md5sum -c fichier
ca permet pas de comparer 2 md5sum ça!!!


---------------
débutant sur Debian et débutant en scripting
Reply

Marsh Posté le 29-08-2008 à 13:49:20    

begindebian a écrit :

ca donne ca alors md5sum -c fichier
ca permet pas de comparer 2 md5sum ça!!!

tu as testé dans ton terminal ? Ca marche ?
 
Pour l'instant, fais juste séparément les deux md5sum et compare à la main (ou plutôt à l'oeil) si ca te donne bien la même chose des deux côtés.


---------------
TriScale innov
Reply

Marsh Posté le 29-08-2008 à 13:57:49    

"md5sum nom_fichier > toto " marche


---------------
débutant sur Debian et débutant en scripting
Reply

Marsh Posté le 29-08-2008 à 14:21:27    

begindebian a écrit :

"md5sum nom_fichier > toto " marche


OK, très bien.
 
Pour faire la comparaison automatique, il te faudra utiliser 'test' et des backquotes. Essaie d'écrire un bout de script qui affiche "OK" si les deux md5sum sont égales et "transfer failed" sinon.


---------------
TriScale innov
Reply

Marsh Posté le 29-08-2008 à 14:30:40    

ok mais je sais pas comment lui dire le fichiers local c'est ... et le fichier remote c'est...


---------------
débutant sur Debian et débutant en scripting
Reply

Marsh Posté le 29-08-2008 à 14:37:39    

begindebian a écrit :

ok mais je sais pas comment lui dire le fichiers local c'est ... et le fichier remote c'est...

Ben comment t'as fait à la main dans ton terminal ?


---------------
TriScale innov
Reply

Marsh Posté le 29-08-2008 à 14:40:15    

je bloque : dans ma petite tete j'arrive pas a savoir comment dire ou est le fichier d'origine a chercker et ou est le fichier destination à checker.
 
 
CLIENT=client
LOG=log
FILE=nom_fichier*
REMOTEDIR=$2
REP=/home/edidev/client/snd
ARCHIVE=/home/edidev/client/archive_snd
LOG=/home/edidev/client/logs/envois`date +%Y%m%d`
TMP=/home/edidev/client/tmp
 
REPORT=${BASE}/report
TOFILE=to.err
SUBJECTFILE=subject.err
BODYFILE=body.err
COMMENT="Erreur lors de l'envoi FTP vers $CLIENT"
INTERVAL=60
 
cd $REP
 
/usr/bin/expect << EOF
spawn /usr/bin/sftp login@adresse_ftp
expect "password:"
send -- "mot_de_passe\r"
expect "sftp>"
send -- "md5sum $file > $tmp/toto.txt\r"
expect "sftp>"
send -- "put $file\r"
expect "sftp>"
send -- "md5sum
send -- "exit\r"
EOF
 


---------------
débutant sur Debian et débutant en scripting
Reply

Marsh Posté le 29-08-2008 à 15:00:27    

ca ca marcherai mieux :  
cd $REP
md5sum $file >> $tmp/sources$file.txt
/usr/bin/expect << EOF
spawn /usr/bin/sftp login@site_ftp
expect "password:"
send -- "mot_de_passe\r"
expect "sftp>"
send -- "put $file\r"
expect "sftp>"
send -- "md5sum $file >> $tmp/destination$file.txt\r"
expect "sftp>"
send -- "exit\r"
EOF


Message édité par begindebian le 29-08-2008 à 15:01:28

---------------
débutant sur Debian et débutant en scripting
Reply

Marsh Posté le 29-08-2008 à 16:07:58    

est-ce que tu as compris à quoi sert expect ? (en particulier, est-ce que tu as compris que toutes tes commandes "send" servent à envoyer des commandes à sftp ?)
quand tu es dans un terminal, où tapes tu tes commandes md5sum ? dans un shell ou bien dans sftp ?
pourquoi le "get" du sftp a disparu ?


---------------
TriScale innov
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed